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?
答案 0 :(得分:4)
它不能。你覆盖了你的缓冲区并覆盖了数组之外的内存。你的程序碰巧不会崩溃或将猫传送到你的显示器,然后在10元素阵列的开头从内存中发现'\0'
不早于13个字节。
答案 1 :(得分:3)
您超越char
数组的行为是未定义。为了清楚起见,您需要确保有足够的空间来存储数据和 \0
字符串终止符,否则cout
的行为将不确定。
如果遇到此情况,编译器可以执行任何。
您的输出是常见的表现形式,但您必须不依赖此类行为。
答案 2 :(得分:0)
因为它可能会使用为str2保留的空间。 但这是未定义的行为,它可以做任何事情(可能是段错误(访问冲突或在您的操作系统上命名的任何内容)