动态内存分配不会使(制作)buff 溢出?

Dynamic memory allocation does not make (making) a buff overflow?

我有此代码用于测试目的

char *name;
name = (char *) malloc(21); // 20 char + '[=10=]' byte
printf("Input your name: ");
gets(name);
printf("%s\n", name);

如果我理解的话,malloc 已经分配了一些块内存的 21 个字节,我将其转换为一个 char 指针。 我在测试中输入了一些大长度的字符串(超过 21 个字符),但没有出现缓冲区溢出。

我没有掌握什么概念?

当您将第 22 个字符写入 name 时,就会发生缓冲区溢出。该字符存储在为 name 分配的存储空间之外的内存位置。溢出缓冲区的影响是未定义的行为,它有一个不做任何值得注意的事情的坏习惯,尤其是在简单的应用程序中。