-1

文字への 10 個のポインターの配列を宣言しました。10 個のうち 3 個だけを初期化し%sまし\nた。

hi
hello
how 
segmentation fault

しかし、使用\nしないと、次のような出力が得られます。

hihellohow(null)...(7 times).

誰かがこれを説明できますか?


コード 1

#include <stdio.h>

void main()
{
    char *a[10] = {"hi", "hello", "how"};
    int i = 0, j = 0;

    a[0] = "hey";
    for (i = 0;i < 10; i++)
        printf("%s\n", a[i]);
}

コード 2

#include <stdio.h>

void main()
{
    char *a[10] = {"hi", "hello", "how"};
    int i = 0, j = 0;

    a[0] = "hey";
    for (i = 0;i < 10; i++)
        printf("%s", a[i]);
}
4

3 に答える 3

5

あなた自身が言ったように、3番目以降の配列要素を初期化しないため、自動的にnullポインターに初期化されます。これらのヌルポインターを印刷しようとすることは未定義の動作であるため、何かが発生する可能性があります(最初の例のようにセグメンテーション違反を含むか、2番目の例のように動作するように見えます)。

どちらの場合も、あなたのコードは間違っており、ランダムなことが起こる理由 (セグメンテーション違反や動作しているように見える) を説明しようとしても意味がありません。

于 2013-10-18T12:33:47.440 に答える