【发布时间】:2017-01-15 05:58:00
【问题描述】:
打印一个指向 int 的指针后,我打印一个指向 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 序列也会对您的编译器产生影响。它可能会或可能不会在我的编译器中产生这样的差异。”谢谢!
标签: c++ output cout c-strings char-pointer