0

配列のサイズは 3 しかなく、各要素に char を割り当てましたが、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。お使いのマシンでは、このメモリに null バイトが含まれているようです。それが起こることに頼ることはできません。おそらく、別のマシンまたは別の実行では、そのメモリには何か他のものが含まれている可能性があります。または、コンピュータが不正なメモリ アクセスを検出し、プログラムがクラッシュする可能性があります。あるいは、あなたのプログラムは、他の巧妙で予想外の方法で壊れるかもしれません。

簡単な答え: あなたのプログラムにはバグがあり、その動作から意味のある結論を引き出すことはできません。

于 2014-11-22T19:25:36.387 に答える