3

次の C プログラムをループしようとすると、「Segmentation fault: 11」というエラーが表示されます。

#include <stdio.h>

main() {

int i;

char *a[] = {
    "hello",
    "how are you",
    "what is your name"
};

for (i = 0; a[i][0] != '\0'; i++ ) {
    printf("\n%s", a[i]);
}
}

しかし、forループ内のテストを次のように置き換えると、エラーは発生せず、すべて正常に動作します。

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

a[i][0] != '\0'テストが機能しない理由と、代わりに何をすべきかを誰かが説明してくれれば、本当にありがたいです。

4

1 に答える 1

8

不足している終了文字列が必要です。の定義a

char *a[] = {
        "hello",
        "how are you",
        "what is your name",
        ""
    };

空の文字列a[3]がないと、存在しないものにアクセスしているため、seg fault が発生します。

于 2013-06-23T23:29:13.307 に答える