• ベストアンサー

コマンドとコマンドラインとコマンドラインオプションの違いを教えてください。

ただ今Cの関数を勉強しているのですが、勉強用HPに ************************ int main(int argc, char *argv[ ]) 戻り値:int型、引数:argc, argv 後者は、コマンドライン オプションを受け付ける。 argc はオプションの数、argv はオプションの内容となる。 ************************ とあります。 そこで質問なのですが、コマンドラインオプションとは何ですか? また、 ・コマンド ・コマンドライン ・コマンドラインオプション の違い、それぞれの意味も教えてください。 マックのコマンド+s、コマンド+vみたいなものですか? それともunixのcdや./のようなものでしょうか。 わからない単語が出てくると、 そこで頭が混乱してしまい先に進めない性質なので困っています。 どうぞご教授よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★回答 ・『コマンド』とは  プログラム名の事です。  つまり unix でいうと cd、cp、ls などです。 ・『コマンドライン』とは  プログラム名 引数 … 引数、オプションの1行の事です。  または、コマンドを打ち込む入力待ちの状態です。 ・『コマンドラインオプション』とは  cp コマンドでいう -f、-i、-p、-r などの事です。  cp コマンドでのファイル名は引数と呼びます。  一般にオプションは - 文字から始まります。  あと Windows の OS では / 文字から始まるスイッチオプションという呼び方がありますが、  - 文字から始まるオプションとほぼ同じ役割です。また、- 文字、/ 文字から始まるものを  合わせてオプションと呼ぶこともあります。 その他: ・main() 関数の引数にある『argc』は引数の個数、『argv』は引数の内容です。  参考にした HP ではオプションの数、オプションの内容と呼んでいますが、引数もオプションも  含まれます。引数とオプションはプログラムで区別するため、そのために - 文字や / 文字から  始まる文字列をオプション(スイッチ)などとして区別しています。もし、- 文字や / 文字から  始まらない文字列ならば、それが引数とプログラムで解釈するように C ソースを記述します。 ・具体的にはコマンドラインで『cp -i -r file1.c file2.c』と入力するとプログラムでは、  argc = 5  argv[ 0 ] = "cp" ←プログラム名  argv[ 1 ] = "-i"  argv[ 2 ] = "-r"  argv[ 3 ] = "file1.c"  argv[ 4 ] = "file2.c"  argv[ 5 ] = NULL ←必ずセットされる  となります。 ・argc はオプションと引数の合計数です。また、プログラム名もカウントされます。  その他、argv[0] にプログラム名が入るか、空文字列が入るかは処理系依存です。  あと argv[ argc ] の位置には必ず NULL ポインタがセットされることが保障されています。 ・以上。参考に!

nekoc
質問者

お礼

詳しいご説明、どうもありがとうございます。 例の提示と、それに対するわかりやすいご説明のおかげで 今までごっちゃになっていたコマンドの区別がつくようになりました。 ぜひ、今後の参考にさせていただきます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • kb-nike
  • ベストアンサー率36% (72/200)
回答No.2

<・コマンド 実行命令。 例: cd <・コマンドライン コマンドを入力する行(プロンプトに続くスペース)。 ・コマンドラインオプション コマンドの引数。 例: cd ./ の ./

nekoc
質問者

お礼

ご回答どうもありがとうございます。 スパッとした解説のおかげで頭がこんがらがずにすみました。 おまけに例も提示してくださりまして、大変わかりやすかったです。

全文を見る
すると、全ての回答が全文表示されます。
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

いま、あなたが、質問されている環境はなんですか。どの環境で、C言語をべんきょうされていますか?

nekoc
質問者

お礼

ご回答どうもありがとうございました。

nekoc
質問者

補足

説明不足で申し訳ありません。 unixでプログラムを作成しております。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • コマンドライン引数 *argv[]はなぜポインタ?

    C言語初心者です。 コマンドライン引数、 int main(int argc, char *argv[]) というのを最近勉強しましたが、引数2番目がポインタになっている理由について、 どなたか教えて下さい。 そういう仕様なんだから、それに従いましょう、ということでしょうか? int main(int argc, char argv[]) では、ダメなのでしょうか? このポインタでの引数渡しについて、 なんらかの納得のいく考え方をご存知の方がいらしたら、教えて下さい。 宜しくお願い致します。

  • コマンドプロンプトを使用してのコマンドライン引数

    winXPのコマンドプロンプトを利用して 参考書「独習C」を使い、C言語の学習をしています。 その本の7.4の項目~main()の引数~で main(int argc,char *avgv[])を利用すると コマンドラインから引数をとることができるとありますが 私の学習環境ではうまくいきません。 具体的には #include <stdio.h> int main(int argc, char *argv[]) { int i; for(i=1; i<argc; i++) printf("%s ", argv[i]); return 0; } というプログラムを実行しても何も表示されません。 どうすればコマンドライン引数を利用できますか?

  • Cocoa をコマンドラインから実行して引数を受け取りたい

    C・Objective-C に関して全くの初心者ですが、よろしくお願いします。 Cocoa で作ったアプリをコマンドラインから実行して、渡した引数を NSObject のサブクラスで受け取りたいのですがどうしたらよいでしょうか。 main.m の main 関数で受け取る方法はわかったのですが、サブクラス MyObject.m 内の任意のメソッドに渡す方法がわかりません。 // 引数を受け取って表示する int main(int argc, char *argv[]) {   fprintf(stdout, "%s\n", argv[1]);   return NSApplicationMain(argc, (const char **) argv); } ご教示いただけますと幸いです。

  • C言語でコマンドラインの引数について。

    コマンドラインで引数をわたす基本的なプログラムは main(int argc,char *argv[]){....] ですよね。 今回実行時に、 >実行ファイル名 123 + 233 といれたら、123+233を計算してくれるプログラムを作ろうとしています。 その場合、main(int argc,int *argv[]){} としたら、argv[1]に123が入って、argv[2]に+が入って、argv[3]に233が、入るというわけではないんでしょうか? とりあえず、確認で #include<stdio.h> main(int argc,int *argv[]) { printf("%d\n%d\n",argv[1],argv[3]); } としてみたんですが、実行結果は、とても長い数字がでてきてきました。 なにがいけないのか教えてください。 お願いします。 あとWindows MEでVC++6を使ってます。

  • コマンドライン引数

    コマンドライン引数で以下のようなプログラムを実行したいのですが どうしたらいいのか分かりません!! みなさんの意見を聞かせてください(lll´Д`lll)    □☆□□□☆□□□☆□□□☆□    ☆★☆☆☆★☆☆☆★☆☆☆★☆    □☆□□□☆□□□☆□□□☆□    □☆□□□☆□□□☆□□□☆□    ☆★☆☆☆★☆☆☆★☆☆☆★☆    □☆□□□☆□□□☆□□□☆□    □☆□□□☆□□□☆□□□☆□    ☆★☆☆☆★☆☆☆★☆☆☆★☆    □☆□□□☆□□□☆□□□☆□    □☆□□□☆□□□☆□□□☆□ プログラムは途中まで作ったのですが、肝心なとこは 全く分りませんっっ #include <stdio.h> int main(int argc, char *argv[]) { int yoko, tate, i, j; if( argc < 3 ) return(1); sscanf( argv[1], "%d", &yoko ); sscanf( argv[2], "%d", &tate ); for( j = 0; j < tate; j++ ) { printf("\n"); } return(0); } /* end of pat2.c */

  • コマンドラインから引数を渡したいのですが・・・

    VC.NETで参考書に載っていた下のようなコードを書きました。 #include <iostream> #include <cstdlib> using namespace std; int main (int argc, char *argv[]) { int sum; if (argc != 3) { cout << "引数の個数が違います。"; return 1; } sum = atoi (argv[1]) + atoi (argv[2]); cout << "合計=" << sum << '\n'; return 0; } しかしながら、引数の個数が違います。としか出力されません。どうすればよろしいでしょうか?

  • コマンドラインに入力されている文字列の1文字を出力

    ○下記のコードについての質問になります #include <stdio.h> int main( int argc, /*コマンドライン引数*/ char *argv[] /*コマンドライン */ ) { int counter; /*ループカウンタ*/ for( counter = 0 ; counter < argc ; counter++) { printf( "argv[%d]:%s\n" , counter , argv[counter] ); } /*----------------------------------------------------------- printf( "コマンドラインの1文字を抜き取る:%c" , ????????); ------------------------------------------------------------*/ return (0); } ○質問 コマンドラインのプログラムになります。 「--」で囲っている部分になりますが、 コマンドラインに入力されている文字列の1文字だけを出力できるように したいのですが、どうすればこれを実現することができるのでしょうか?? 一例として >command.exe orange ringe ^^^^^^ と、コマンドを打ったときに、「^^」の部分になりますが、 orangeの「a」だけを出力させたい場合を、知りたいと思っております。 以上、宜しくお願いします。

  • コマンドラインから引数を渡すことについて

    ----------------------------------------------- #include<stdio.h> #include<stdlib.h> int main(int argc,char *argv[ ]) { FILE *fin,*fout; char ss[256]; if(argc != 3){ printf("引数の数が違います\n"); exit(1); } if((fin=fopen(argv[1],"r"))==NULL){ printf("入力ファイルをオープンできません\n"); exit(1); } if((fout=fopen(argv[2],"w"))==NULL){ printf("出力ファイルをオープンできません\n"); exit(1); } while(fgets(ss,256,fin)!=NULL){ fputs(ss,fout); } fclose(fin); fclose(fout); return 0; } ----------------------------------------------- 以上のプログラム名は「tcopy.cpp」でコマンドプロンプトから実行し、ファイルをコピーするという事を行っていきます。 「aaa.txt」と「bbb.txt」の2つを用意し、「aaa.txt」の内容、 abcdef ABCDEF 012345 を「bbb.txt」にコピーしていきます。 そこで疑問なのですが、ファイルをコピーする際、コマンドプロンプトから、 >tcopy aaa.txt bbb.txt と打ち込むとコピー出来るようであり、「tcopy」、「aaa.txt」、「bbb.txt」が引数になるという事なのですが、何故この3つが引数になるのかという事と、 int main(int argc,char *argv[ ]) のargcに引数が何故代入されるかが分かりません。 後、「aaa.txt」と「bbb.txt」がargv[1]とargv[2]に何故対応しているかが分かりません。 教えていただければ嬉しいです。

  • 「コマンドライン引数チェック」て何

    #include <stdio.h> int main(int argc, char *argv[]) { FILE *fp; char gyou[1024]; int gyousuu = 0; if ( argc < 2 ){ printf("file mei ga nai\n"); return -1; } fp = fopen(argv[1], "r"); if ( fp == NULL ){ printf("fopen dekinai\n"); return -2; } while(fgets(gyou, sizeof(gyou), fp) != NULL){ gyousuu++; } fclose(fp); printf("gyousuu=%d\n", gyousuu); return 0; }    以上のプログラムはご覧のとおり、「ファイルの行数を計算」のプログラムです。 さて以上の  if ( argc < 2 ){ printf("file mei ga nai\n"); return -1; } は「コマンドライン引数チェック」を行っています。・・・  if ( argc < 2 ){の「argcは2以上である必要がある」と参考書に書いてあります。   以上ですが意味が日光手前ですが、プログラムの行数をカウントするうえで、  「コマンドライン引数チェック」とはどんな作業を行っているとこなのでしょうか!?  よろしくお願いします。  

  • コマンドラインのオプションの読み取り

    C++で、引数に/オプションで処理ごとに実行するプログラムを書きたいのですが、具体的にmain関数でどう書けばよいのでしょうか? スマートの方法が知りたいです。 sample.exe /test=1 aの関数を実行 sample.exe /test=2 bの関数を実行 sample.exe /test=3 cの関数を実行 int main(int argc, char**argv) { ... ここの処理? } void a(){ print "A\n"; } void b(){ print "B\n"; } void c(){ print "C\n"; }

このQ&Aのポイント
  • キヤノン製品のインクジェットプリンタiX6830で印刷を開始しようとすると、エラー1250排紙トレーエラーが発生し、印刷ができない状況が発生しています。排紙トレーは正しく開いており、上部カバーも閉じているにもかかわらず、このエラーが発生しています。時折、リセットボタンを押すことで印刷ができることもありますが、数ヶ月間問題に直面しています。
  • この排紙トレーエラーが発生する原因は複数ありますが、排紙トレーの位置が正しく認識されていないことが一つの可能性です。また、排紙トレーに紙が詰まっている場合や、内部のセンサーに問題がある場合もエラーが発生することがあります。
  • 対処方法としては、以下の手順を試してみてください。まず、排紙トレーを取り出し、紙を再度セットし直してください。また、排紙トレーの位置が正しく認識されていない場合は、トレーをしっかりとはめ直してみてください。さらに、内部のセンサーに問題がある場合は、キヤノンのサポートに連絡して修理を依頼することをおすすめします。
回答を見る

専門家に質問してみよう