0
// Trying to read file


void readFilee(char *namefile){

    FILE *f_in = fopen(namefile,"r");
    char x;
    int i = 0;

    if(!f_in){ printf("Error"); exit(0); }

    /* read to EOF */
    while(1){
        x = getc(f_in);
        if(x == '\n') continue;
            archivo[i] = x;
        if(x == EOF) break;
            i++;
    }
    tamArchivo = i;
    fclose(f_in);
}

エラーがf_inだったという事実はnullですが、理由がわかりませんか?サーバーを複数のクライアントに接続しようとしていますが、クライアントは接続を待機して初期化されています。

コマンド検証"if"I get "Error"

4

4 に答える 4

0

f_in使用する前に、NULLでないことを確認してください。fopenが失敗し、これによりf_inがNULLになると思います。後で呼び出すとgetc、クラッシュします。

そうでない場合は、たとえばcgdbを使用してアプリケーションをデバッグし、クラッシュの原因となる行を確認してください。

于 2013-01-10T10:10:07.490 に答える
0

に置き換えwhile (1)てみてくださいwhile (!feof(f_in))。これにより、ファイルが最後にあるときにループが終了します。ループに入っているように、ファイルの終わりをチェックするべきではありません。これには、ファイルの終わり文字がファイルのどこかにある必要があります。の値EOFは実際には特別に設計されているため、ファイルには表示されません。

その他の注意点は、ファイルが正常に開かれたことを確認するためのコメントを外すことです。このチェックが失敗した場合はfxxx、ファイルポインタの関数を使用しないでください。

于 2013-01-10T10:10:41.057 に答える
0

追加

archivo[i] = '\0';

while ループが終了した後。これにより、文字列の末尾に null 文字が追加されますarchivo

また、配列のメモリ空間がarchivoファイルの内容全体を取得するのに十分でない可能性があるため、バッファオーバーフローが発生してクラッシュする可能性があります

于 2013-01-10T10:17:20.143 に答える
0

「archivo」の配列境界をチェックしていないので、最初にチェックする必要があります

于 2013-01-10T10:20:37.323 に答える