- ベストアンサー
コマンドライン引数argv[]について
C言語初心者です。以下のようなプログラムを書いたのですが、コンパイルで来ません。関数func1, func2を分けずに全てメインに書けば動作するのですが、なぜ関数に分けてしまうとコンパイル出来ないのかがわかりません。エラー内容は、argvが宣言されていない、といった内容です。 #include <stdio.h> void func1(void){ printf("%s\n", argv[1]); } void func2(void){ printf("%s\n", argv[2]); } int main(int argc, char *argv[]){ if(strcmp(argv[1], "abc")==0){ func1(); } else{ func2(); } }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
当然です。 func1、func2ではargvって見えてない argvはmain関数が呼び出される時に渡されたものですから include <stdio.h> void func1(char *dat){ printf("%s\n", dat); } void func2(char *dat){ printf("%s\n", dat); } int main(int argc, char *argv[]){ if(strcmp(argv[1], "abc")==0){ func1(argv[0]); } else{ func2(argv[1]); } } ですかね。 コンパイルしてチェックしてないですから受け渡しでポインター渡し記述しないとだめかも
その他の回答 (1)
- D-Matsu
- ベストアンサー率45% (1080/2394)
変数には「スコープ(有効範囲)」というものがあります。 関数の引数として宣言された変数は、その関数の中だけで有効になります。 つまり、main()内でのみ有効なargvを関数func1()/func2()で利用しようとしているのが間違いな訳です。 別の関数で利用したい場合、引数等の手段で渡してやらなければなりません。
お礼
有り難うございました。