0

虽然我的数组大小只有 3,并且我为每个元素分配了一个字符,但仍会自动添加一个 NULL 终止符。是什么导致在我的代码中添加 NULL 终止符?

int main(void)
{
    char s[3];
    s[0] = 'f';
    s[1] = 'o';
    s[2] = 'o';

    int i = 0;

    while (s[i] != '\0')
        printf("%c", s[i++]);

    printf("\n");

    if (s[i] == '\0')
        printf("Null Terminator Added\n");
}   
4

1 回答 1

3

它不是“自动添加的”。当您尝试访问s[3]时,您正在访问不属于数组的内存s。在您的机器上,该内存似乎恰好包含一个空字节。你不能指望这种情况发生;也许在另一台机器上,或另一台运行,该内存将碰巧包含其他东西。或者,计算机可能会检测到非法内存访问,您的程序会崩溃。或者你的程序可能会以其他一些微妙和意想不到的方式中断。

简短的回答:你的程序有问题,你不能从它的行为中得出任何有意义的结论。

于 2014-11-22T19:25:36.387 回答