0

たとえば、入力test \n testして、このコードを使用して記述しようとすると、

FILE *f = fopen(file, "w+");
fflush(f);
if (f==NULL) {
    //perror(f);
    return 0;
}
else{
    int i = fprintf(f, "%s", text);
    if (i>0) {
        fclose(f);

        return  1;
    }
    else{
        fclose(f);

        return 0;
    }
}

そしてこれを使ってそれを読んでください

FILE *f = fopen(file, "r");
static char c[100000];
const char *d;
if (f!=NULL) {
    if (fgets(c, 100000, f) !=NULL){
        d = c;
    }
    else{
        d = "No text";
    }
}
else{
    /*
     char *ff = f;
     perror(ff);
     */
    d = "File not found";
}
fclose(f);

return d;

読み取りと書き込みのみを行い、改行はtest行いません。なぜこれが機能しないのですか?testtest

4

2 に答える 2

5

このfgets()関数は、最初に検出した改行まで読み取るか、結果を格納するためのスペースが不足したとき、またはEOFを取得したときに停止します(したがって、読み取るデータがなくなります)。

に続く呼び出しfgets()は、最初の改行の後に情報を収集します。

一度に読みたい場合は、を検討してfread()ください。OTOH、そこでも解決しなければならない問題があります(特に、(1)最大1000バイトを要求できますが、20バイトしか戻らないため、コードは短い読み取りを正しく処理する必要があります。(2)などfread()とは異なり、入力文字列をnullで終了しませんfgets())。

書き込みに関してfwrite()は、は論理的に補完されますが、and friends、または、、、またはその他の標準的なI/O書き込み関数をfread()引き続き使用できます。'これらの関数を使用して書き込む場合は、これらの他の関数を使用して読み取る必要があります'に正式な制約はありません。それはあなたが書いたり読んだりしているものの性質に依存します、しかしあなたはしばしば最も便利であるように思われるように自由に切り替えることができます。fprintf()fputs()putc()

于 2013-03-18T01:53:47.240 に答える
3

http://www.cplusplus.com/reference/cstdio/fgets/

ストリームから文字を読み取り、(num-1)文字が読み取られるか、改行またはファイルの終わりに到達するまでのいずれか早い方まで、C文字列としてstrに格納します。

于 2013-03-18T01:53:38.363 に答える