-1

如果我声明一个字符数组:char arr[200] 然后我随后使用函数 cin 将值读入arr[200] 并在命令行窗口中键入:abcd

是否有一个空终止:\0在输入末尾自动添加到数组中?

(我不这么认为,因为我使用 cin 函数对其进行了测试: cin>>abcd )

有人可以向我解释为什么吗?

下面是我用来测试的代码片段

    char arr[200]
    int count=0;
    int i=0;
    cin>>arr // i type into command window:abcd

    while (arr[i] != '\0')
    {
       count++;
        i++




    }

我的计数值不会是 4,而是像 43,因此我得出结论,字符数组在 cin 函数之后不是空终止的

4

2 回答 2

3

从 a 到字符数组的格式化输入std::istream将以空值终止输入,如 C++11 27.7.2.2.3/9 中所指定:

operator>>charT()然后在下一个位置存储一个空字节 ( )

一旦明显的语法错误得到修复,您发布的代码就会给出预期的结果。但请注意,这是非常危险的;没有检查数组的长度,所以太多的输入会溢出它。我强烈建议您使用std::string类而不是纯字符数组来管理字符串。

您通过链接在评论中发布的代码如下所示:

char array[20];
int length=getlength(array);
cin>>array;

在尝试测量未初始化数组的字符串长度读入数组。这可能会产生任何结果、崩溃或导致任何其他未定义行为的示例。

将来,您应该确保您在问题中发布的代码与展示您所询问的行为的代码相同;否则,不可能回答这个问题。

于 2012-12-06T14:23:25.463 回答
0

是的,输入将是零终止的。否则,例如,您将无法在输入后不打印随机字符的情况下打印它。

于 2012-12-06T13:48:18.763 回答