- ベストアンサー
C言語でコマンドラインの文字列を調べる方法
- C言語を使ってコマンドラインの文字列を調べる方法について学習しています。
- 参考書には、アプリケーションの動作を指定するオプションを指定する方法として、プログラムの説明と例が載っています。
- 質問として、プログラムの実行結果画面で入力した文字列が消えてしまう問題や、プログラムの一部の処理について質問しています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
コマンドラインというのは、「実行するときに指定」するものです。 例えば XXXXX.exe -a -s 等というように。 別質問でfgetsで読みこんだような、「実行しててから入力」ではありません。 こっちは XXXXX.exe ←コマンドライン -a ← ここはプログラム実行中 -s ← ここはプログラム実行中 という感じです。 今、Visual Studio を使っていて、いるのではないでしょうか? Visual Studioから「実行」「デバッグ実行」した場合、標準では後者のような「コマンドライン引数無し」の状態で実行します。 この後に 「-」 とキー入力しても、既にプログラムは実行されているので「コマンドライン引数」にはなりません。 さらに、その画面表示は、プログラムが終了した状態です。 コマンドライン引数を指定するには、プロジェクトのプロパティの「デバッグ」欄から行います。 あるいは、コマンドプロンプトから、引数を付けて実行します。 標準では、プロジェクトの下のDebugまたはReleaseフォルダに実行ファイルができるので、CDコマンドで実行ファイルのあるフォルダに移動して 実行ファイル 引数 の形で実行してください。 こちらの方法だと、引数を変えて実行するのも簡単なので、引数を変えたら、結果がどうなるかいろいろ試して理解してください。 (2) int main(int argc, char * argv[]) とすると argc: argvの長さ=実行コマンドと引数の数 argv: 実行コマンド(argv[0])と引数(argv[1]~) となります。 char* argv[argc] ; と配列宣言したようなイメージです。 argcをそのまま変更しているからややこしいので、次のように変えます。 int a = argc ; while (a > 0) { a--; printf("a: %d , argc: %d\n",a,argc); if (argv[a][0] == '-') { if (argv[a][1] == 'a') printf("-a オプション\n"); if (argv[a][1] == 's') printf("-s オプション\n"); } } これなら、デクリメントする意味がわかるのでは無いでしょうか? ※ でもなんで、後からやるんだろう? 引数は先頭から処理するのが普通ですし for( a=1; a<argc ; a++ ){ argvの処理 } とかの方がわかりやすいと思うのですが。 ※※ 前回の質問のと合せて、その参考書、サンプルコードがあまりよくない気がします。 (3) 配列、ポインタのことは、よく理解してください。この先ずーっとついてまわります。 ・関数の定義に使う char * argv[] は char **argv と同じです。 ということは argv : char ** 型 *(argv+X) / argv[X] : char *型 *(*(argv+X)+Y) / argv[X][Y] : char 型 → char* argvX = *(argv+X) ; とすると *(argvX+Y) / argvX[Y] : char 型 です。混乱したら、一つずつ分解して、順番に考えることです。
その他の回答 (2)
- akina_line
- ベストアンサー率34% (1124/3287)
こんにちは。 下記サイトにコマンドライン文字列がどのようにargvに格納されるかが載っています。 http://ratan.dyndns.info/MicrosoftVisualC++/filepointa2.html では。
お礼
ご回答いただき、ありがとうございました。
- eclipse2maven
- ベストアンサー率32% (33/101)
お礼
ご回答いただき、ありがとうございました。
お礼
ご回答いただき、ありがとうございました。