3

私は C を学んでいて、これをどのように表現すればよいかわかりませんが、次のコードの 11 行目のコメントを解除すると、このプログラムが壊れるのはなぜですか?

#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("argc: %d\n", argc);

    char *states[] = {};
    int i = 0;
    while(i < argc) {
        printf("arg %d: %s\n", i, argv[i]);
        //states[i] = "test";  
        i++;
    }


    return 0;
}

この行のコメントを外してプログラムを実行すると、次のようになります。

greggery@Lubu:~/code$ ./myprog aaa bbb ccc
argc: 4
arg 0: ./lc
arg 1: aaa

なぜループstates[i] = "test";を壊すのですか?whileコメントアウトすると、すべての引数が表示されます。

4

2 に答える 2

9

states配列が空なので壊れます。argc問題を解決するには、(C99 で許可されている) のサイズにします。

char *states[argc];

この理由は次のとおりです。char *states[] = {};ゼロ要素の配列を作成するため、逆参照states[i]は未定義の動作です。

于 2013-07-21T22:35:13.663 に答える