如果我声明一个字符数组: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函数之后字符数组不会被终止
答案 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)
是的,输入将被终止。否则,如果输入后没有打印随机字符,则无法打印它。