我正在努力建立我在V ++中的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;
}
Run Code Online (Sandbox Code Playgroud)
运行时,这是我的结果:
ABC(输入)
f - ABC(输出)
DEF(输入)
f - EF(输出)
也试过:
ABC DEF(输入)
f - ABC(输出)
f - EF(输出)
我希望两条线的输出都是相同的,因为我认为我只读了f一次.此外,如果我正在接受cin并应用它f,为什么第一次尝试读取整个字符串(ABC)而第二次尝试缺少D?
我尝试使用此代码打印结果,但同样的问题发生,所以我在这里假设它是一个问题,cin而不是cout.
for (j=0;j<3;j++) {
std::cout << f[j];
}
std::cout << std::endl;
Run Code Online (Sandbox Code Playgroud)
做了一些研究,我发现这个看起来很有希望的问题,但是当我把声明char f[]改为时char *f,我最终得到了SEGFAULTs cin,而const char *f不会编译.
我在这里盲目地摸索,并希望得到关于如何正确使用cin和/或char数组的一些指导.
重申我的问题:为什么输出std::cout << f << std::endl;虽然没有明确地重新分配值,但却以这种方式变化?
char f[]="", c[]="";
Run Code Online (Sandbox Code Playgroud)
相当于
char f[1]="", c[1]="";
Run Code Online (Sandbox Code Playgroud)
即它声明了两个f和c作为一个字符的数组(即NULor \0,null终止符).
换句话说,你正在阅读它们结束时的两个阵列,它可以完美地工作,可以做非常奇怪的事情(就像你看到的那样),可能会崩溃,或者可能会让紫色的大象在下周二从你的显示器中爆发出来.