c - C 中的字符数组是动态的吗?

标签 c arrays dynamic gets

我用 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 中的数组不是动态的,您看到的是由于缓冲区溢出导致的未定义行为。

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

关于c - C 中的字符数组是动态的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21250296/

相关文章:

c - 如何在结构中使用结构

c - 如何使用信号量在 fork 进程之间切换?

javascript - 如何在对象数组(结构)中查找字符串

google-maps - 动态加载Google Maps api

c - 使用 free() 时堆损坏

java - 使用动态缓冲区? java

c - getch() 和 getchar() 有什么区别?

c - 如何调整由函数创建的字符数组中的内存大小?

java - 检查一个数字是否在二维数组中,并打印它所在的行

c - K&R 第 6 章中的 strdup() 在未分配 sizeof(char) * strlen(s) 位时如何工作?