cin函数是否添加了在输入结束时终止的null



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

是否有一个null终止:在输入结束时自动添加到数组中?

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

有人能解释一下为什么吗?

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

char arr[200]
int count=0;
int i=0;
cin>>arr // i type into command window:abcd
while (arr[i] != '')
{
count++;
i++


}

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

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

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

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

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

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

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

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

是的,输入将以零结尾。否则,例如,如果在输入后不打印随机字符,就无法打印它。

相关内容

最新更新