为什么添加的字符串多于分配的内存

时间:2017-01-18 11:24:32

标签: c linux

以下是代码段:

char *b = NULL;

b = new char[5];

if(b != NULL) {

    printf("b=%p\n",b);

    sprintf(b, "helloPLS...123456789123456789");

    printf("b = %s\n", b);
}

output : b = helloPLS...123456789123456789

如果只分配了5个字节,那么为什么所有" helloPLS ... 123456789123456789"字符串被添加到5字节的内存中?

我的程序完美无缺。

1 个答案:

答案 0 :(得分:4)

您正在写过您分配的内存的结尾。 C标准清楚地说明了这种情况下的行为是不确定的。

未定义的行为并不意味着“总是崩溃”。这意味着它似乎可行。这意味着您的C运行时环境的实现是在其所需的任何事情的权利范围内,并且仍然符合标准。

未定义的行为是您应该仔细注意的,正是因为您的程序可能“完全正常”,直到它不会。