• ベストアンサー

質問させてください(かなり長いです)

int main(int argc,char *argv[]) { if(argc != 3){ char err_message[] = "ファイル名を指定して下さい、またはファイル名が多すぎる\n"; write(2,err_message, strlen(err_message)); exit(EXIT_FAILURE); } char *InFile = argv[1]; /*入力ファイル名設定*/ char *OutFile = argv[2]; /*出力ファイル名設定*/ myclass ob(InFile,OutFile); ob.open(); ob.main(); ob.close(); return(0); } このようなソースがありif(arg=!3)のところを実行して終了してしまいます。よくint main(int argc,char *argv[])という書き出しを見ますがmainの引数はどこで使われているのでしょうか。よろしければご教授ください。

noname#105193
noname#105193

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

  • ベストアンサー
  • Mizyu
  • ベストアンサー率41% (245/593)
回答No.3

実行形式を「hoge.exe」としたときに 実行するとき hoge.exe aaa bbb ccc とすれば argc=3 argv[0]=実行形式ファイルのフルパス argv[1]="aaa" argv[2]="bbb" argv[3]="ccc" となります。 VC6ならプロジェクト、プログラムの引数に「aaa bbb ccc」と記載して、デバッグしてください。

その他の回答 (3)

  • Mizyu
  • ベストアンサー率41% (245/593)
回答No.4

#3です。すいません。 引数3つだとargc=3ではなく4ですね。 なので、argc=3でチェックをかけているので引数は2つです。 訂正します。

回答No.2

main関数の引数はプログラムを起動するときの引数ですよ たとえば上記のプログラムの名前がProgram1だった場合、 Program1 hikisu1 hikisu2 と起動するとargcに引数の数3が代入されて argvに2次元配列で文字列が代入されます。 if(argc != 3) を実行して終了する場合、起動するときの引数が3つじゃない場合が考えられます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

このプログラムはどのように実行しているのでしょうか. ちゃんと引数を 2個与えていますか?

noname#105193
質問者

補足

VC++6.0でビルドして実行しています。なんかそれだといけないような気がしてきました・・

関連するQ&A

  • エラーが出ます

    12,51,13,123,133,551,… というコンマで区切られているファイルを読み込みたいです。数字は100文字です。どう書けば全部読み込めるでしょうか? よろしくお願いします。 int main(int argc,char *argv[ ]){ int line; int i; FILE *fp; fp = (argc > 1)? fopen(argv[1],"r"): stdin; if(fp==NULL){ perror("fopen"); exit(0); }   while(fscanf(fp,"%d",&line) != EOF){ printf("%d\n") } if(argc>1){ fclose(fp);   }

  • 引数の渡し方と受け方(argv)

    メインで引数をもらい、それをパラメタチェック関数に 渡す場合、どのような形で渡せばいいですか? ※メインでargvを変数に格納しないで、 そのままargvを関数に渡す方法が分かりません。 int prm_chk(char *argv[]) { /* 処理省略 */ } int main (int argc, char *argv[]) { /* 処理省略 */ /* 以下のパラメタ(argv)の渡し方 */ if(prm_chk(*argv[]) != 0){ exit(-1); } exit(0); }

  • エラーの意味

    このプログラムは、三番目のコマンドライン引数に、 watch が入力されると、画面に文字表示されるはずですが、 おそらく if ( argv [3] == 'a' ) putchar ( c ) のところで、エラーが出ます。 文字列定数は 、1 文字か 2 文字でなければならない ( 関数 main ( int,char * * ) ) ' int ' 型は 、' char * ' 型に変換できない ( 関数 main ( int,char * * ) ) このエラーの意味が解らないのですが、何を伝えたいのか解説をお願いします。 int main(int argc,char *argv[]) { FILE *fp ,*fp1; int c; fp=fopen(argv[1],"r"); if(argv[1]==NULL){ printf("no open"); exit(1); } fp1=fopen(argv[2],"w"); if(argv[2]==NULL){ printf("no open"); exit(1); } while ( ( c=fgetc ( fp ) ) !=EOF ) { fputc ( c , fp1 ) ; if ( argv[3] == ' watch ' ) putchar ( c ) ; }

  • main の引数には const 付けた方が

    C言語での質問です。 引数を取るような main 関数は int main( int argc, char *argv[]){~} とされていますが、argvの指す文字列を変更する、というのはいくら何でもまずいので、 int main( int argc, const char *argv[]){~} あるいは int main( int argc, const char const * const * argv){~} の方がいいのではないでしょうか? 何故、constを付けない形が出回っているのでしょうか?

  • メイン関数

    メイン関数には int main(void) と int main(int argc, char** argv) がありますが、後者のint argc, char** argv はどういう意味なのでしょうか?

  • main(int argc,char **argv[])の意味を教えて下さい

     今晩は、Cの初心者です宜しくお願いします。  main関数の引数で、int main(int argc,char **argv[])とint main(int argc,char *argv[])と書かれている場合がありますが、 「**argv」と「*argv」の意味の違いはどのようなもので、どのように使い分けるのでしょうか。 また、必ずポインタ型でとるという決まりでしょうか。 宜しくお願いします。

  • C言語の質問です

    #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { FILE *fpi, *fpo; unsigned char idat; /* 引数のチェック */ if (argc != 3) { fprintf(stderr, "Usage: %s [input] [output]\n", argv[0]); exit(1); } /* 入力画像のオープン */ if((fpi=fopen(argv[1], "rb")) == NULL){ fprintf(stderr, "input file open error\n"); exit(1); } /* 出力画像のオープン */ if((fpo=fopen(argv[2], "wb")) == NULL){ fprintf(stderr, "output file open error\n"); exit(1); } /* 入力画像の読込み */ while (fread(&idat, sizeof(unsigned char), 1, fpi) == 1){ /* 2倍の変換 */ if (idat * 2 > 255) { idat = 255; } else { idat = idat * 2; } /* 変換データの書出し */ if(fwrite(&idat, sizeof(unsigned char), 1, fpo) != 1){ fprintf(stderr, "data write error\n"); exit(1); } } fclose(fpi); fclose(fpo); return (0); } このプログラムをグレースケール化のプログラムに修正してください お願いします

  • C言語のシェルプログラミングの課題が分かりません。

    C言語のシェルプログラミングを作れという課題で、以下のように作ったんですが、実行して何度かコマンドを入力した後、exitによって一発で終わらせることができません。どのように書き換えればいいか教えて下さい。 また、他にも書き換えた方がよいと思えるところがあったら是非教えて下さいm(_ _)m #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/wait.h> #include <sys/types.h> #include MAX_ARGS 10 #include MAX_LEN 100 extern char **environ; void child(int argc, char *argv[MAX_ARGS]); int main(void){ int argc, n = 0; int status; char input[MAX_LEN], *argv[MAX_ARGS], *cp; const char *delim = "\t\n"; while (1){ ++n; printf("$ "); fflush(stdout); if(fgets(input, sizeof(input), stdin) == NULL){ break; } cp = input; for(argc = 0; argc < MAX_ARGS; argc++){ if((argv[argc] = strtok(cp, delim)) == NULL) break; cp = NULL; } if(strcmp(argv[0], "exit") == 0){ exit(0); } pid_t pid = fork(); if(pid == -1){ perror("fork"); exit(1); }else if(pid == 0){ child(argc, argv); }else{ wait(&status); } } return 0; } void child(int argc, char *argv[MAX_ARGS]{ execvp(argv[0], argv); }

  • C言語で自作したcpコマンドが上手く動作しません

    当方、プログラミングを勉強中の学生です。 先日、ファイル入出力関数を用いてcpコマンドを自作しました。 一応、コンパイルは通るのですが、コピーしたファイルを開くことができません。 そのファイルのパーミッションを確認してみたところ 「----------」となっており、読み書き実行すべて不可となっていました。 ソースは以下の通りなのですが、何が問題でしょうか。 回答よろしくお願い致します。 #include<stdio.h> #include<fcntl.h> #include <string.h> #include <errno.h> #include <sys/types.h> #include <sys/uio.h> #include <unistd.h> #define SIZE 8192 int main(int argc, char *argv[]) { int fd1, fd2; char buf[SIZE]; if ( argc != 3 ){ char err_message[] = "ファイル名を指定して下さい。\n"; write(2, err_message, strlen(err_message)); return 1; } argv[0] = "mycopy"; fd1 = open(argv[1], O_RDONLY); fd2 = open(argv[2], O_WRONLY | O_CREAT); if (fd1 < 0 || fd2 < 0) { char err_message[] = "ファイルをオープンできません。"; write(2, err_message, strlen(err_message)); write(2, strerror(errno), strlen(strerror(errno))); write(2, "\n", 1); return 1; } while(1) { if (read(fd1, buf, SIZE) == 0) { break; } else if (read(fd1, buf, SIZE) > 0) { write(fd2, buf, SIZE); } else { char err_message[] = "エラーが発生しました。"; write(2, err_message, strlen(err_message)); write(2, strerror(errno), strlen(strerror(errno))); write(2, "\n", 1); return 1; } } close(fd1); close(fd2); return 0; }

  • main( )

    次の様なプログラムを作りました。 Dosプロンプトを開き、コンパイルで出来た、exeファイルのアドレスを渡しました。 例えば、2と3を引数として渡す時、 2 スペースを押す、 3 enter  の順に行うと、エラーになります。 どの様に、引数を渡すのか操作方法を教えてください。 お願いします。 #include<stdlib.h> #include<stdio.h> int main(int argc, char *argv[]) {    if(argc!=3){     printf("2つの数を指定してください。");     exit(1);    }     printf("%f",atoi(argv[1])+atoi(argv[2]));    return 0; }

専門家に質問してみよう