很新的C++和我有以下代码:C字符串比定义长度短一个字符?
char input[3];
cout << "Enter input: ";
cin.getline(input,sizeof(input));
cout << input;
并输入类似abc
只会输出ab
,切断它的一个字符短。定义的长度是3个字符,为什么它只能捕获2个字符?
很新的C++和我有以下代码:C字符串比定义长度短一个字符?
char input[3];
cout << "Enter input: ";
cin.getline(input,sizeof(input));
cout << input;
并输入类似abc
只会输出ab
,切断它的一个字符短。定义的长度是3个字符,为什么它只能捕获2个字符?
请记住,C-字符串空终止。要存储3个字符,您需要为空值终止符分配4个空间。
而且在C在评论中提到的@MikeSeymour ++尽力避免这一问题完全和使用的std :: string。
你可以感谢你最喜欢的神明,这个故障保险是在,大部分功能都不是那种。
在C中,字符串是空终止,这意味着它们需要一个额外的字符不是实际的数据来标记所述串实际上结束。
由于您无论如何都使用C++,所以应该避免使用纯粹的char数组。一些原因:
string
。 string
s拥有强大的复制语义,涵盖了几乎所有你能想到的东西。
***定义的长度是3个字符,为什么它只能捕获2个字符?***您需要一个额外的字符作为空终止符。 – drescherjm 2015-02-24 18:19:05
谢谢!如果您将此作为答案发布,我会接受它。 – m0meni 2015-02-24 18:21:25
如果你是C++的新手,不要使用奇怪的怪癖,如C风格的字符串呢。使用'std :: string',它的功能正如你所期望的那样,然后在你准备面对真正的疯狂时学习它是如何工作的。 – 2015-02-24 18:22:31