C字符串比定义的长度短一个字符?

时间:2015-02-24 18:17:03

标签: c++ cstring

c ++非常新,我有以下代码:

char input[3];

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

输入abc之类的内容只会输出ab,将其缩短一个字符。定义的长度是3个字符,为什么它只捕获2个字符?

2 个答案:

答案 0 :(得分:4)

请记住,c-strings为空终止。要存储3个字符,由于null终止符,您需要为4分配空间。

同样在c ++的评论中提到的@MikeSeymour最好完全避免这个问题并使用std :: string。

答案 1 :(得分:3)

你可以感谢你最喜欢的神,这个故障保护装置,大多数功能都不是那种。

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

既然你正在使用C ++,你应该避免使用简单的char数组。一些原因:

  • 缓冲区溢出。你设法在第一次尝试时遇到了这个问题,请提示一下!
  • Unicode感知。我们生活在2015年。任何标准都不允许使用256个字符。
  • 记忆安全。泄漏正确的string比普通的旧数组更难。 string具有强大的复制语义,几乎涵盖了您能想到的任何内容。
  • 易用性。您可以使用整个STL算法列表!使用它而不是自己动手。