代码之家  ›  专栏  ›  技术社区  ›  ovrwngtvity

动态内存分配不会导致缓冲区溢出?[副本]

  •  0
  • ovrwngtvity  · 技术社区  · 9 年前

    我有用于测试的代码

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

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

    我没有理解的概念是什么?

    1 回复  |  直到 9 年前
        1
  •  3
  •   D.Shawley    9 年前

    将第22个字符写到 name 。该字符存储在分配给 名称 。溢出缓冲区的效果是 未定义的行为 它有一个讨厌的习惯,特别是在一个简单的应用程序中,什么都不做。