2016-08-07 15 views
1

私はC言語でsetvbuf()機能を使用して、バッファ上のファイルの内容を保存しようとしているが、これは、そうするためのコードです:setvbuf()関数がCのバッファに増加を追加するのはなぜですか?

#include <stdio.h> 
#include <string.h> 

int main() { 

FILE *fp=fopen("test.txt","r+"); 
char buff[BUFSIZ]; 
char buff2[BUFSIZ]; 

setvbuf(fp,buff2,_IOFBF,BUFSIZ); 
fgets(buff,BUFSIZ,fp); 
printf("%s\n",buff2); 

system("PAUSE"); 
return 0; 
} 

を、これはファイルの内容である

line 1 
line 2 
line 3 

しかし、コードを実行すると、コンソールには次のように表示されます。

line 1 
line 2 
line 3 3 

出力の最後に追加の文字が含まれていますか?

答えて

2

setvbufに提供されたバッファがインプリメンテーションで使用されているかどうか、またはどのような方法で実装されているかは不明です。それがstdio FILEに関連付けられている間に内容から意味のあるものを派生させようとするのは、あなたがするべきことではありません。

+0

'setvbuf'を置き換える提案? – Mehdi

+0

何をしようとしていますか? *意図的に* stdioバッファの内容を確認する方法はありません。これは、さまざまな実装の選択を可能にする抽象化/カプセル化の一部です。 –

関連する問題