C 字符串比定义的长度短一个字符?
C string one character shorter than defined length?
对 c++ 很陌生,我有以下代码:
char input[3];
cout << "Enter input: ";
cin.getline(input,sizeof(input));
cout << input;
并且输入类似abc
的内容只会输出ab
,将其缩短一个字符。定义的长度是3个字符,为什么只捕获2个字符?
你可以感谢你最喜欢的神,这个故障保险在里面,大多数功能不是那样的。
在 C 语言中,字符串以 null 结尾,这意味着它们需要比实际数据多一个字符来标记字符串实际结束的位置。
由于您无论如何都在使用 C++,因此您应该避免简单的 char 数组。一些原因:
- 缓冲区溢出。您第一次尝试就成功解决了这个问题,请指点一下!
- Unicode 意识。我们生活在 2015 年。仍然使用 256 个字符以任何标准都是不可接受的。
- 内存安全。泄漏一个适当的
string
比一个普通的旧数组更难。 string
s 具有强大的复制语义,几乎涵盖了您能想到的任何内容。
- 易用性。您拥有完整的 STL 算法列表供您使用!使用它而不是自己滚动。
请记住,C 字符串是空终止的。由于空终止符,要存储 3 个字符,您需要为 4 个字符分配 space。
也正如 @MikeSeymour 在 c++ 的评论中提到的,最好完全避免这个问题并使用 std::string。
对 c++ 很陌生,我有以下代码:
char input[3];
cout << "Enter input: ";
cin.getline(input,sizeof(input));
cout << input;
并且输入类似abc
的内容只会输出ab
,将其缩短一个字符。定义的长度是3个字符,为什么只捕获2个字符?
你可以感谢你最喜欢的神,这个故障保险在里面,大多数功能不是那样的。
在 C 语言中,字符串以 null 结尾,这意味着它们需要比实际数据多一个字符来标记字符串实际结束的位置。
由于您无论如何都在使用 C++,因此您应该避免简单的 char 数组。一些原因:
- 缓冲区溢出。您第一次尝试就成功解决了这个问题,请指点一下!
- Unicode 意识。我们生活在 2015 年。仍然使用 256 个字符以任何标准都是不可接受的。
- 内存安全。泄漏一个适当的
string
比一个普通的旧数组更难。string
s 具有强大的复制语义,几乎涵盖了您能想到的任何内容。 - 易用性。您拥有完整的 STL 算法列表供您使用!使用它而不是自己滚动。
请记住,C 字符串是空终止的。由于空终止符,要存储 3 个字符,您需要为 4 个字符分配 space。
也正如 @MikeSeymour 在 c++ 的评论中提到的,最好完全避免这个问题并使用 std::string。