Visual Studioでコマンドライン引数を取得する

1.こんかいのおはなしはなんでしょ

今回のお話、一体なんでしょうか?

そう、タイトルにも書いてありますね。
Visual Studioでデバッグするときにコマンドライン引数をmain関数で受け取れるようにするって感じの記事です。

コマンドライン引数ってなんだろねって人はこれを見てみて

int main(int argv, char* argc[]){

}

main関数をこんな感じで定義してるのみたことない??
これらのことをコマンドライン引数って言って、プログラムの実行時にmain関数に与える引数のことです。

特に難しい話は出てこないです

 

2.ぷろぐらむ

今回、コマンドライン引数を受け取るプログラムは、ファイルパスを受け取ってそれの中身を1行ごとに読み取って書き出すプログラム。

百聞は一見に如かずっていうし、プログラムを見てみよっか

#define _CRT_SECURE_NO_WARNINGS // セキュリティ警告の解除

#include <stdio.h>

int main(int argc, char* argv[]) {
        FILE* fp; // ファイルポインタ
        char buf[255]; // ファイル読み取り用バッファ

        // 引数として指定がない場合の処理
        if (argc < 2) {
                printf("このプログラムは、ファイルを引数として伴い実行します。\n");
                return -1;
        }

        // 引数を表示してみる
        for (int i = 0; i < argc; i++) {
                printf("argv[%d] : %s\n", i, argv[i]);
        }
        printf("\n");

        // ファイルオープン・検査
        if ((fp = fopen(argv[1], "r")) == NULL) {
                printf("ファイルオープンに失敗しました。\n");
                return -1;
        }

        // 1行ずつ読みだして表示
        while (fgets(buf, 255, fp) != NULL) {
                printf("%s", buf);
        }
        printf("\n");

        return 0;
}

こんな感じのやつ
argcってのはargument countの略で引数の個数を、argvってのがargument valueで引数の文字列。
ちなみにargv[0]はプログラム本体のパスが格納されているのでargv[1]以降が自分で指定するやつ。

 

3.プロジェクトの設定

Visual Studioでコマンドライン引数を指定するには少々プロジェクトの設定をいじってやる必要がある。
ソリューションエクスプローラーからプロジェクトのプロパティを開いて、デバッグという項目を見て欲しい。
こんな感じになってると思う。

ここで気にするのは、「作業ディレクトリ」と「コマンド引数」という2個。
作業ディレクトリは、デフォルトでは$(ProjectDir)ってなってると思う。これはいじらなくてもいい。
で、コマンド引数には今回はaaa.txtというテキストファイルを指定してあげている。

じゃあこのaaa.txtはどこに作ればいいかというと、作業ディレクトリに指定されている$(ProjectDir)が指し示す場所、つまりvsxprojファイルがある場所に作ればいい

こんな感じ

今回はaaa.txtの中には{aaa, bbb, ccc, ddd}という4行の記述がある。

で、これらを設定した上で実行してやるとこんな感じになると思う。

ってな感じでVisual Studioでは少し工夫をしないとコマンドライン引数を与えることができない。

あわせて読みたい

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です