打印一个指向一个int后,我打印指向一个字符:C++:用cout和指针无法解释的行为为char
#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;
时为什么会得到预期的输出?
注意:我不期待从cout得到q的地址。我期待得到由& q指向的C字符串。我错误的是,如果预先包含行cout << "&i: " << &i << endl;
,输出如何打印'q'。但是,如果我将该行注释掉,则输出中会有垃圾数据。为什么在包含行cout << "&i: " << &i << endl;
时我的输出中没有垃圾数据?
@iammilind不重复。我不期待一个地址,而是一个C字符串。但是,我认为你回答了我的问题: “值得注意的是,打印一个非NUL终止的c_str是一个**未定义的行为**,在你的情况下会发生这种情况,这就是为什么cout序列也会影响编译器。或者可能不会在我的编译器中产生这样的差异。“谢谢! –