0

MPI c プログラムを作成する必要があります。string.h を追加しましたが、コンパイラはデータ型 string を認識しません。コマンドラインから文字列を読み取り、以下の関数に渡したい

int find_rows(char * file)
{
    int  length=0;
    char buf[BUFSIZ];
    FILE *fp;
    fp=fopen(file, "r");
    while ( !feof(fp))
    {
         // null buffer, read a line
        buf[0] = 0;
        fgets(buf, BUFSIZ, fp);
        // if it's a blank line, ignore
        if(strlen(buf) > 1) 
        {
            ++length;
        }

    }
    fclose(fp); 
#ifdef DEBUG
    printf("lFileLen = %d\n", length);
#endif
return    length;     

}

この機能は、私が持っているときに機能します

 char file[50] = "m5-B.ij";

そして電話する

nvtxs = find_rows(&file );

しかし、与えるとセグメンテーション違反が発生します

 nvtxs = find_rows(argv[1] );

誰か助けてくれませんか?

4

1 に答える 1

1

それ以外の

find_rows(&file );

電話

find_rows(file );

fileはすでにポインターです。ポインターのアドレスを関数に渡していました。

その後、関数の後半で、find_rows無効なファイルを開いて、未定義の動作fpを引き起こす null ポインターである 操作を試みます。

編集

あなたの電話nvtxs = find_rows(argv[1] );は正しいです。fp=fopen(file, "r");ファイルが存在しないか、ファイルが見つからない場合、ファイルを開くことができない可能性があります。

于 2013-04-22T07:59:48.237 に答える