Re: Почему строка пустая?
От: watchmaker  
Дата: 23.04.21 10:23
Оценка: +2
Здравствуйте, indee, Вы писали:

I>Почему mystr пустая и длина = 0 (mystr.length())?


У тебя в программе неопределённое поведение. Оно может проявляться множеством способов, в том числе и таким.

Когда ты записываешь что-то в буфер строки s напрямую, то запись можно делать только в область памяти от s.data() до s.data()+s.size() причём в последнюю позицию s.data()+s.size() можно записывать только '\0'.
В функции test это требование нарушается и запись идёт за пределы этого диапазона, перезатирая чужие данные.


  Скрытый текст
Технически, длина строки mystr не меняется и остаётся нулём, так как она хранится отдельно и от содержимого буфера [ s.data(), s.data()+s.size() ] не зависит. А функция test никак не обновляет размер. Но это деталь реализации. И она не особо важна, пока в программе есть неопределённое поведение.



I>//    mystr = mystr.c_str(); после этого все ОК
I>//    std::cout << mystr << " Length = " << mystr.length() << std::endl;mystr = mystr.c_str();


Что ты тут подразумеваешь, говоря что "все ОК"?
То что дальше программа иногда выводит мусор вместо исходной строки, а иногда падает?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.