cin函数是否在输入结束时添加了null?

时间:2012-12-06 13:44:27

标签: c++ user-input c-strings

如果我声明一个字符数组: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函数之后字符数组不会被终止

2 个答案:

答案 0 :(得分:3)

std::istream到字符数组的格式化输入将使输入空终止,如C ++ 11 27.7.2.2.3 / 9中所述:

  然后

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

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

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

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

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

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

答案 1 :(得分:0)

是的,输入将被终止。否则,如果输入后没有打印随机字符,则无法打印它。