2009-08-03 23 views
0

argv[0]からどうやって読むことができますか?私はNetBeansを使用しています。たびに、私はstdinで入力する必要があります。 argvを使用すると、プログラムは自分の入力なしで実行されます。argv [0]から読む

は、ここに私のコードです:

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

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

UPDATE:

私はコンパイルして実行すると、私は例の文字列を入力する必要があります!文字列は常に同じです: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を設定することも重要だと思います。

+1

あなたの質問が何であるか、またはあなたが達成しようとしていることが明確でない場合は、問題を示す完全なサンプルプログラムで明確にできますか? –

+1

引数を取ったときのargcの値は? argv [0]は実行ファイルの名前を保持する必要があります。最初の引数はargv [1]にあるはずです。 – Zed

答えて

7

argv [0]は実行ファイルの名前です。私はあなたがそれから読んでみたいとは思わない!

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); 

など(もちろん、あなたがして提供する必要がありますすることができます:むしろ、私はあなたがARGV [1](コマンドライン上のプログラムへの最初の引数として指定したファイル名)を開き、ことを読んでもらいたいと思いますより詳細で有用なエラーメッセージなど、しかし私はあなたが欠けているように見えるキーポイントに焦点を当てようとしています)。

編集:よくああ、焦点はコメントから判断すると、時代遅れに思えるので、私はちょうど最低限許容可能なエラーメッセージを提供するために、 を編集しました。

+1

入力から読み込もうとする前に、fopenの戻り値をチェックすることを忘れないでください! –

+0

OK、何らかのエラーチェックを追加しました。単純なままにしました。他の誰もコードを与えていないことがわかりましたが、これはもう一度実際に役立つことが間違いであることを証明していると思います。 –

+0

最初に引数が1つあるかどうかを確認するにはargcを最初に使用してください – hiena

2

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

0

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