我正在尝试通过 VBA 构建我在 C++ 方面的整体专业知识,所以请原谅我的代码中出现的任何明显问题......使用下面这个简单的程序,我得到了意想不到的输出。
#include <iostream>
int main() {
char f[]="", c[]="";
std::cin >> f;
std::cout << f << std::endl;
std::cin >> c;
std::cout << f << std::endl;
return 0;
}
运行时,这是我的结果:
ABC (input)
f - ABC (output)
DEF (input)
f - EF (output)
也试过:
ABC DEF (input)
f - ABC (output)
f - EF (output)
我希望这两行的输出是相同的,因为我认为我只是读入f
一次。此外,如果我乘坐 cin
并将其应用于 f
, 为什么第一次尝试读取整个字符串 ( ABC
) 而第二次尝试缺少 D
?
我也尝试使用此代码打印结果,但出现了同样的问题,所以我在这里假设这是 cin
的问题而不是 cout
.
for (j=0;j<3;j++) {
std::cout << f[j];
}
std::cout << std::endl;
经过一些研究,我发现了 this question ,这看起来很有希望,但是当我从 char f[]
更改我的声明时至 char *f
, 我在 cin
上遇到了 SEGFAULTs , 而 const char *f
甚至不会编译。
我在这里盲目摸索,希望能得到一些关于如何正确使用 cin
的指导。和/或 char
数组。
重申我的问题:为什么输出 std::cout << f << std::endl;
,虽然没有明确地重新分配一个值,但以这种方式变化?
最佳答案
char f[]="", c[]="";
相当于
char f[1]="", c[1]="";
即它将 f
和 c
声明为一个字符的数组(即 NUL
或 \0
,空终止符) .
换句话说,您正在读取两个数组的末尾,它们可以完美地工作,可以做非常奇怪的事情(就像您看到的那样),可能会崩溃,或者可能会在下周二从您的显示器中喷出紫色的大象.
关于c++ - 带有 char[] 的 cin/cout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11381043/