2

私は自分が間違っていることを理解できないようです。私は単に文字のリストを処理し、それらを印刷しようとしています。

char *name[] =  {"RGS", "O", "NRGY", "SIG", "BML-O", "BHI", "KSU", "ORN"};
void function() {
    int i;
    //for (i =0; i<sizeof(name) / sizeof(char); i++) {
    for (i =0; name[i] != NULL; i++) {
        printf ("%s \n", name[i]);
    }
}

最初のforループ(コメントアウトされたもの)を使用すると、リストが出力されますが、最後に2つの項目があり(NULL)、セグメントフォールトが発生します。2 番目の for ループ (コメント解除されたもの) を使用すると、すべてが出力されますが、セグメント エラーも発生します。

出力:

RGS 
O 
NRGY 
SIG 
BML-O 
BHI 
KSU 
ORN 
Segmentation fault: 11

コードをコンパイルするときにエラーは発生しません( gcc ./learningC.c)。この関数をコメントアウトしてもエラーは発生しません(コードのこの領域に問題があると思います)。私は何が間違っているのだろうか?

4

1 に答える 1

6

sizeof(char*)ループの最初のスタイルでは、 ではなくを使用する必要がありますsizeof(char)。配列の要素はchar*ではなくcharです。

ループの 2 番目のスタイルでは、そこに配置すると、配列の末尾に NULL のみが含まれます。

char *name[] =  {"RGS", "O", "NRGY", "SIG", "BML-O", "BHI", "KSU", "ORN", NULL};
于 2012-06-03T00:44:00.327 に答える