c++ - 带有 char[] 的 cin/cout

标签 c++ char cin

我正在尝试通过 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]="";

即它将 fc 声明为一个字符的数组(即 NUL\0,空终止符) .

换句话说,您正在读取两个数组的末尾,它们可以完美地工作,可以做非常奇怪的事情(就像您看到的那样),可能会崩溃,或者可能会在下周二从您的显示器中喷出紫色的大象.

关于c++ - 带有 char[] 的 cin/cout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11381043/

相关文章:

c - 我的 strcpy 中的段错误

c++ - 从控制台读取并创建类实例

c++ - 如何在 C++ 中从控制台读取整数而不添加换行符?

c++ - 为什么这个 C++ 程序打印 "2"?

c++ - LibCurl WriteCallback(异步?)- C++

c++ - 无法理解使用此 map<> 方法背后的证明

java - 如何将 String ArrayList 的内容转换为 char ArrayList

c++ - 异常处理

c++ - 最后未调用后缀运算符

c++ - 如何从 C++ 中的字符指针获取 Java 字符串