【发布时间】:2014-02-10 14:01:57
【问题描述】:
我用 C 编写了一个简单的程序。一个输入字符串并将其与长度一起显示的程序。
#include<stdio.h>
int main()
{
char a[4];
printf("Enter the name : ");
gets(a);
printf("\nThe name enterd is : %s",a);
printf("\nLength of string is : %d",strlen(a));
getch();
return 0;
}
程序不包含警告或错误。
在运行时,我输入了值“melwinsunny”作为输入。没有错误,显示的结果是:
Enter the name : melwinsunny
The name entered is : melwinsunny
length of string is : 11
为什么会这样?我已经声明了长度为 4 的字符数组( char a[4] )。请解释一下。
这是否意味着字符数组是动态的?
【问题讨论】:
-
不,这意味着您刚刚执行了缓冲区溢出。 C 不牵你的手。如果有的话,它会直接瞄准你的脚,等待你扣动扳机。
-
它将覆盖其他内容。在这种情况下可能未使用内存,但请尝试以下操作:
int i1=5; char a[4]; int i2=6; printf("i1, i2 are %i, %i\n", i1, i2); gets(a); printf("i1, i2, a are %i, %i, %s\n", i1, i2, a);。这是未定义的行为,这意味着没有任何保证,它可能取决于你的编译器和操作系统(或者它可能会导致恶魔飞出你的鼻子——这在实践中是极不可能的)