ここから本文です

c言語でコマンドライン引数としてargc やargcvを使いますが

soc********さん

2019/6/114:54:30

c言語でコマンドライン引数としてargc やargcvを使いますが

よく
if( argc == n) や
if (argc < n) (nは整数かな)
と書いてます。これはどういった意味なのでしょうか
argc == n、argc < nの意味がわかりません。nは一体どこから来たんですか? 何を意味してるんですか?

閲覧数:
54
回答数:
5

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

ikt********さん

2019/6/216:35:00

argc でコマンドラインで与えられた引数の 個数 がわかる。

こういうのは、ネットで他人に質問してるくらいなら、
自分で小さなプログラム書いて、試してみるべき。
そのほうが、早いです、たぶん。

#include <stdio.h>

int main(int argc, char *argv[]) {
    printf("argc = %d\n", argc);
    for (int i = 0; i < argc; i++) {
        printf(" argv[%d] = \"%s\"\n", i, argv[i]);
    }
}

実行例:
$ gcc -o a.out foo.c
$ ./a.out
argc = 1
 argv[0] = "./a.out"
$ ./a.out 1
argc = 2
 argv[0] = "./a.out"
 argv[1] = "1"
$ ./a.out 1 banana apple
argc = 4
 argv[0] = "./a.out"
 argv[1] = "1"
 argv[2] = "banana"
 argv[3] = "apple"


>argc == n、argc < nの意味がわかりません。nは一体どこから来たんですか? 何を意味してるんですか?

n ってのは質問時にテキトーに書いただけで、変数 じゃないでしょ、たぶん。
2 とか 3 とか、リテラルのはず。

どこかから来た んじゃなく、あなたが決めるもんです。

コマンドライン引数 を手段に使うアプリケーションを
あなたが書くと決めたとする。
・処理対象とする ファイル名 をコマンドライン引数で指定させることに決めた
・それは「少なくとも1個」は、必須とする
・プログラムの使い手が「1個も指定してくんなかった」なら、エラーメッセージして何もせず終了する、ということにしよう。
と仕様決めしたんだとしたら、たとえば、こう実装するってことです。

if (argc < 2) {
___ fprintf(stderr, "Usage: %s filename...\n", argv[0]);
___ return EXIT_FAILURE;
}

// 少なくとも1個は指定してもらえてる。
// argv[1] 以降を、目的処理するコードを、以下に書く。

ベストアンサー以外の回答

1〜4件/4件中

並び替え:回答日時の
新しい順
|古い順

kat********さん

2019/6/118:20:29

nは変数なので、どこかで決まった値が
仕込まれているはずです。

if (argc < n)などは、引数の数が足りないときに、
その先の処理に進めさせないために書きます。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

プロフィール画像

カテゴリマスター

n2q********さん

2019/6/116:44:48

コマンドラインの仕様をあらかじめ定めます。

たとえば test.exe というプログラムを作るとして、

test file

こういう感じです。test のところが test.exe そのもので、次の file の部分がコマンドライン引数。ここに test.exe に処理してもらいたいファイルのパス名を指定するものとする……という仕様です。



で、test.exe を実行する際に、この通りにコマンドライン引数が与えられたら嬉しいわけですが、そうじゃない場合は困ります。

なので、そのような困った状態になってないかを調べるための if 文がそれです。



【if( argc == n) や if (argc < n) (nは整数かな) と書いてます。これはどういった意味なのでしょうか】

そのプログラムを作った人の考えとして、コマンドライン引数が n - 1 個であると思っていて、

argc == n は、その通りであること
argc < n は、コマンドライン引数の個数が少ないこと

という判断を行おうとしているわけ。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

bas********さん

2019/6/115:13:49

さあ? 定義によるから。

でも普通に読むと、

nは 変数。

それより前までに

int n;
n = 3;

とか、

int n = 10;

とかみたいに書かれていると思う。

argcv っていうのはありませんが、*argv[] は コマンドライン引数の配列。argc はその個数。

だから、

単純に 「コマンドライン引数が指定の個数より小さいなら」とかでしょうね。

あ、定数の場合もありますが、ふつうは N と大文字で書きます。
(慣習的に)

n は number の略だと思う。

for文で i = ... と i が使われるのは int型で十分だから、Integer の略として i が慣習的に使われているようです。

これと一緒で、単なる数字は慣習的に n または N とおき、
二個目は m または M ( nの次はm ) と書いたりします。

そういうことだと思う。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

プロフィール画像

カテゴリマスター

aki********さん

2019/6/115:06:13

nがどこから来たかは、そのソースコードを読まなければ分かりません。
おそらく、ソースコードの何処かに、もしくはソースコードがincludeしているファイルのどこかに宣言や値を定義もしくは代入している部分があると思います。

main(int argc, char *argv[])
のargcであれば、そこには、コマンドライン引数の数が入っていますので、
その数をチェックして、正しい(想定された)コマンドライン引数の数であるかをチェックしています。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる