Я хранения C++ const char*
в структуры, определенной в заголовке, как это:Одд Поведение в Struct массив символов
struct Info {
const char* data;
};
Я тогда экземпляр структуры в заголовке класса:
class System {
Info info;
}
Я его так:
info.data = myStr.c_str();
Я затем распечатать его несколько раз, как это:
std::cout << info.data;
Однако странно, что первые два раза я его распечатываю, он отлично работает, отображая правильную строку. Однако третий раз я это делаю, я получаю это:
Output: ���
С трех случайных двоичных символов байт (вопросительные знаки).
Я не касаюсь переменной между каждой печатью. Любая идея, почему это происходит?
Что происходит между различными отпечатками 'info.data'? Почти наверняка делается что-то незаконное или «неопределенное», которое вызывает непреднамеренное изменение либо указателя, либо строки. – wallyk
@wallyk Ничего не происходит с этим, но что вы думаете о ответе J Trana? Я думаю, что c_str() удаляется. Нужно ли мне делать копию буфера c_str? –
Да, но что еще происходит? Почти наверняка есть написанный дикий указатель или написанный для него элемент массива вне пределов. – wallyk