После печати указатель на междунар я печатаю указатель на гольца:C++: Необъяснимое поведение с соиЬ и указатель на символ
#include <iostream>
using namespace std;
int main() {
int i;
cout << "&i: " << &i << endl;
char q = 'q';
cout << "&q: " << &q << endl;
return 0;
}
я получаю следующий результат, как и ожидалось:
&i: 0xffffcc0c
&q: q
Однако, если я закомментировать cout << "&i: " << &i << endl;
и запустить программу еще раз, я получаю следующий результат: необъяснимая
&q: q����
Кто-нибудь знает, почему это происходит?
Если это связано с operator<<
, вставляя в поток, пока не найдет нулевой символ, тогда почему я получаю ожидаемый результат, когда включаю cout << "&i: " << &i << endl;
?
ПРИМЕЧАНИЕ: Я не ожидаю получить адрес q от cout. Я ожидаю получить строку C, на которую указывает & q. Какие ошибки меня в том, как вывод просто печатает «q», если я заранее включу строку cout << "&i: " << &i << endl;
. Однако, если я прокомментирую эту строку, на выходе есть данные мусора. Почему в моем выпуске нет данных мусора, когда я включаю строку cout << "&i: " << &i << endl;
?
@iammilind Не дубликат. Я не ожидаю адрес, кроме строки C. Однако, я думаю, вы ответили на мой вопрос: «Стоит отметить, что печать не завершенного NUL c_str - это неопределенное поведение **. Что происходит в вашем случае. Вот почему последовательности cout также имеют значение в вашем компиляторе. или может не иметь такой разницы в моем компиляторе ». Благодаря! –