ここから本文です

C言語でのプログラミングについての質問です main()関数のコマンドライン引数?

eva********さん

2017/7/818:43:14

C言語でのプログラミングについての質問です

main()関数のコマンドライン引数?

というものについてのプログラムみたいなのですが、実行してもなにも出力されません
何をするプログラムなのか
argc, argv, enum, countとはなんなのか
全くわかりません



#include<stdio.h>
#include<string.h>
int main(int argc, char *argv[])
{
int i;

if (argc <= 1)
return 1;
if(strcmp(argv[1],"enum")==0)
for (i = 0;i < argc;i++)
printf("argv[%d] : %s\n", i, argv[i]);
else if (strcmp(argv[1], "count") == 0)
printf("コマンドラインの引数の数:%d\n", argc - 1);
return 0;
}

閲覧数:
69
回答数:
2

違反報告

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

プロフィール画像

カテゴリマスター

n2q********さん

2017/7/819:08:34

『コマンドライン引数?』

プログラムを起動するときにちょっとした文字列を与えることが出来ます。それが「コマンドライン引数」です。

Word や Excel を起動するとまっさらな画面が現れます。でも、xxx.docx とか xxx.xlsx とかのファイルをダブルクリックすると、そのファイルが開いた状態で起動してきますよね。

どうしてこうなるのかというと、ファイルのパス名を「コマンドライン引数」にして Word や Excel を起動してるのですよ。え?誰がそうやって起動してるのかって?あ、それは Windows です。Windows が裏でそうやってるのです。ちなみに
Windows よりも前のシステム(MS-DOS などといいます)ではユーザーがそうやってました。各自が「コマンドライン引数」を指定してたのです。


今回作成なさったプログラムを起動するときの操作ですが、どうやってますか?マウスで何かをクリックしたりとか、あるいは [F5] キーを押すだけとか、そういった起動の場合、「コマンドライン引数」をどうやって与えれば良いのか困ってしまいますよね。

Visual Studio だと仮定します。もしそうならばプロジェクトのプロパティで設定する形です。デバッグというのがあって、そこにコマンドライン引数の設定がありますよ。

Visual Studio じゃない場合は調べてくださいね。

そうじゃなくて、ちゃんとプログラムのファイル名を(a.out とかを)キーボードから入力して起動している場合、単純にスペースを空けて、その後に何かを書いてください。それが「コマンドライン引数」になりますので。



『argc, argv, enum, countとはなんなのか全くわかりません』

「argc, argv」

コマンドライン引数は原則としてスペースで区切られます。その個数が argc となります。なお、コマンドライン引数を与えていない場合でも 1 となります。何故かっていうと、そのプログラムの名前自体(プログラムファイルの名前)も含めての個数だからです。

で、argv という配列がありまして、argv[0] ~ argv[argc - 1] の範囲でコマンドライン引数を1個ずつ抱えています。

argv[0] はプログラムファイル名です。



「enum, count」は、お書きになったプログラムの中での約束事のようですね。それは C 言語には関係ないものです。(enum というキーワードが C 言語にありますが、ここでの enum はそれとは関係ありません。)

プログラムを読み解くと、次のようになってる模様。

最初のコマンドライン引数を enum とすると、argv[0] ~ argv[argc - 1] が出力される。

最初のコマンドライン引数を count とすると argc - 1 の値が出力される。


以上です。

  • 質問者

    eva********さん

    2017/7/819:22:54

    だいたいわかりました!!
    ですが、コマンドライン引数を入力しようとしても
    実行すると
    続行するには何かキーを入力してください...
    とでてしまいます

  • その他の返信(3件)を表示

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

  • 取り消す
  • キャンセル

質問した人からのコメント

2017/7/8 21:30:01

無事実行できました!
はじめに出力されなかった原因は、count もしくは
enum を入れてなかったことと、適用を押さずにokを押していたからだと思います
詳しく教えていただいてありがとうございました!

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

1〜1件/1件中

her********さん

2017/7/818:59:53

foo.exe というコマンドとしてコンパイルして実行してみました
後は適当に調べてください。

d:\home>cl foo.c
Microsoft(R) C/C++ Optimizing Compiler Version 19.10.25017 for x64
Copyright (C) Microsoft Corporation. All rights reserved.

foo.c
Microsoft (R) Incremental Linker Version 14.10.25017.0
Copyright (C) Microsoft Corporation. All rights reserved.

/out:foo.exe
foo.obj

d:\home>foo enum 6 7 8
argv[0] : foo
argv[1] : enum
argv[2] : 6
argv[3] : 7
argv[4] : 8

d:\home>foo count 6 7 8
コマンドラインの引数の数:4

d:\home>

あわせて知りたい

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

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

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

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

閉じる

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

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

閉じる