C动态中的字符数组是?

MEL*_*WIN 1 c arrays gets dynamic

我在C中编写了一个简单的程序.一个程序用于输入一个String并将其与长度一起显示.

#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;
}
Run Code Online (Sandbox Code Playgroud)

该程序不包含警告或错误.

在运行时,我输入值" melwinsunny "作为输入.没有错误,显示的结果是:

Enter the name : melwinsunny

The name entered is : melwinsunny

length of string is : 11
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我已经声明了长度为4的字符数组(char a [4]).请解释.

这是否意味着字符数组是动态的?

Yu *_*Hao 6

不,C中的数组不是动态的,你看到的是由于缓冲区溢出而导致的未定义行为.

这就是你不应该使用的原因gets(),fgets()而是使用,这样可以防止缓冲区溢出.

  • @MELWIN你应该**永远不要**使用`gets()`.使用`fgets()`代替`stdin`.事实上,在最新的C标准(C11)中,`gets()`已被删除. (2认同)