私はC言語で引数を取得する方法を学んでいますが、以下のコードで以下のコードを実行すると、最初のコードはnullになります。Cの文字列がNULLになる
入力:./a.out a b c d e f g h i j k
出力:(null) b c d e f g h i j k
#include <stdio.h>
int main(int argc, char *argv[])
{
int i = 2, j = 0;
char *foo = argv[1];
char *bar[10];
while(j < 10 && i < argc)
{
bar[j++] = argv[i++];
}
bar[j] = NULL;
printf("%s ", foo);
for(j = 0; bar[j] != NULL; j++)
{
printf("%s ", bar[j]);
}
printf("\n");
return 0;
}
質問がありますか? j == 10のときはb [10]に代入されますが、bはサイズが10でbの範囲を超えて割り当てられます。 –
'"%s "'フォーマットでヌルポインタを渡す動作は定義されていません。あなたの実装は、 ''(null) ''を印刷するのに十分親切です。他の人が必ずしもそうするわけではありません。 –
私の設定(ビジュアルスタジオ2010)では、うまくいきました。しかし、@WilliamPursellは正しいです、fooのアドレスはbarの直後かもしれないので、bar [10]はfooを指しています。 – holgac