2015-02-24 85 views
3

很新的C++和我有以下代码:C字符串比定义长度短一个字符?

char input[3]; 

cout << "Enter input: "; 
cin.getline(input,sizeof(input)); 
cout << input; 

并输入类似abc只会输出ab,切断它的一个字符短。定义的长度是3个字符,为什么它只能捕获2个字符?

+2

***定义的长度是3个字符,为什么它只能捕获2个字符?***您需要一个额外的字符作为空终止符。 – drescherjm 2015-02-24 18:19:05

+0

谢谢!如果您将此作为答案发布,我会接受它。 – m0meni 2015-02-24 18:21:25

+3

如果你是C++的新手,不要使用奇怪的怪癖,如C风格的字符串呢。使用'std :: string',它的功能正如你所期望的那样,然后在你准备面对真正的疯狂时学习它是如何工作的。 – 2015-02-24 18:22:31

回答

4

请记住,C-字符串空终止。要存储3个字符,您需要为空值终止符分配4个空间。

而且在C在评论中提到的@MikeSeymour ++尽力避免这一问题完全和使用的std :: string。

3

你可以感谢你最喜欢的神明,这个故障保险是在,大部分功能都不是那种。

在C中,字符串是空终止,这意味着它们需要一个额外的字符不是实际的数据来标记所述串实际上结束。

由于您无论如何都使用C++,所以应该避免使用纯粹的char数组。一些原因:

  • 缓冲区溢出。您在第一次尝试中遇到了这个问题,请提示!
  • Unicode意识。我们生活在2015年。任何标准仍然使用256个字符是不可接受的。
  • 内存安全。比普通的旧数组更难以泄漏适当的stringstring s拥有强大的复制语义,涵盖了几乎所有你能想到的东西。
  • 易用性。您可以使用整个STL算法列表!使用它而不是滚动你自己的。
+0

您可以扩展Unicode意识吗?我不完全熟悉这意味着什么,为什么有256个字符是不可接受的。 – m0meni 2015-02-24 18:50:36

+1

我认为你是美国人。不幸的是,这个世界大部分都是非美国人,其中一些疯狂的非美国人有愚蠢的写作方式,而那些愚蠢的角色​​不适合你舒适的小256个角色。 미안해! – Blindy 2015-02-24 19:00:53

相关问题