当cin.getline()的第二个参数大于数组的长度时,不可预测的字符串长度

时间:2016-01-08 11:06:00

标签: c++ arrays string

using namespace std;
char str1[10],str2[10];
cin.getline(str1,14);
cin.getline(str2,10);
cout<<strlen(str1)<<'\t'<<strlen(str2);

以上代码的输出如下 -

1234567890123
bye
13         3

str1的长度怎么可能大于10?

3 个答案:

答案 0 :(得分:4)

它不能。你覆盖了你的缓冲区并覆盖了数组之外的内存。你的程序碰巧不会崩溃或将猫传送到你的显示器,然后在10元素阵列的开头从内存中发现'\0'不早于13个字节。

答案 1 :(得分:3)

您超越char数组的行为是未定义。为了清楚起见,您需要确保有足够的空间来存储数据 \0字符串终止符,否则cout的行为将不确定。

如果遇到此情况,编译器可以执行任何

您的输出是常见的表现形式,但您必须依赖此类行为。

答案 2 :(得分:0)

因为它可能会使用为str2保留的空间。 但这是未定义的行为,它可以做任何事情(可能是段错误(访问冲突或在您的操作系统上命名的任何内容)