1

どうすれば読むことができargv[0]ますか?NetBeansを使用しています。毎回、stdinを入力する必要があります。を使用するargvと、プログラムは入力なしで実行されます。

これが私のコードです:

int main(int argc,char *argv[])
{
  char *text;
  int textLen,repNum;

  text = stream2string(stdin,&textLen);
  //....text = argv[0] doesnt work :(

アップデート:

コンパイルして実行するときは、サンプル文字列を入力する必要があります。文字列は常に同じです:ABAABAABBBA。したがって、stdinの代わりに最初の引数を取ります。しかしargv[1]、どちらも機能しません。

ここにありstream2string()ます:

char *stream2string (FILE *fptr, int *n)
{
  static char *s;

  *n = 0;
  ALLOC(s,char,2);
  s[*n] = getc(fptr);

  while(s[*n]!=EOF && s[*n]!='\0' && s[*n]!='\n') {
   REALLOC(s,char,++*n+2);
  s[*n] = getc(fptr);
   }
  s[*n] = '\0';
  return(s);
} /* stream2string() */

textLen設定も重要だと思います。

4

3 に答える 3

8

argv[0]は実行可能ファイルの名前です。そこから読みたくないと思います!むしろ、argv [1](コマンドラインでプログラムの最初の引数として指定されたファイル名)を開いて、次のように読みたいと思います

int main(int argc,char *argv[])
{
  char *text;
  int textLen,repNum;
  FILE *theinput;

  if (argc < 2) {
    /* no argument */
    /* give error message and exit */
    fprintf(stderr, "Must pass an argument!\n");
    exit(1);
  }

  theinput = fopen(argv[1], "r");

  if (!theinput) {
    /* Argument is non-existing file */
    /* give error message and exit */
    fprintf(stderr, "Can't read %s\n", argv[1]);
    exit(1);
  }

  text = stream2string(theinput, &textLen);

  fclose(theinput);

など(もちろん、より詳細で役立つエラーメッセージなどを提供することはできますし、提供する必要がありますが、私はあなたが見逃しているように見える重要なポイントに焦点を当てようとしています)。

編集:ああ、コメントから判断すると、フォーカスは時代遅れのように見えるので、最小限の許容可能なエラーメッセージを提供するように編集しました。

于 2009-08-03T16:41:56.180 に答える
2

代わりにargv[1]を使用して、最初の引数を読み取ってみてください。argv [0]は、呼び出された実行可能ファイルの名前(または、Unix / Linuxシステムでは実行可能ファイルへのリンクの名前)を返します。

于 2009-08-03T16:40:20.973 に答える
0

これは、IDEで実行するときのプログラム引数を設定していないようです。これはNetBeansの問題です-Cとは何の関係もありません。

于 2009-08-03T16:41:15.883 に答える