ユーザからの入力を読み込んで(複数行)、fputs()を使ってファイルに書きたいと思っていました。ここでfgetsを使って複数の入力行を読み込み、Cのfputsを使ってファイルに書き込む方法は?
私のコードは、ユーザからの入力を取得した後
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
char s[25];
fp=fopen("myname","w");
if(fp==NULL)
{
perror("Error opening file\n");
exit(1);
}
while(fgets(s,25,stdin)!=NULL)
fputs(s,fp);
fclose(fp);
return 0;
}
ですが、私はプログラム(私はLinuxを使用しています)の入力プロンプトを閉じるにはCtrl + Cを使用しています。それから私はファイルを開いて、それは何も含まれていません。どうすればこの問題を解決できますか?
fputs()& fgets()の使用に問題はありますか?
あなたのコードは25バイトの行に壊れます。あなたは 'fgets(s、sizeof(s)-1、stdin)'を使うことができ、 'memeset(s、0、sizeof(s));そして 'getline'はこれのためのより良い関数です(それは行を動的に割り当てるためです)。 –
@BasileStarynkevitch、 'fgets'のmanページは、' fgets()はストリームからサイズ文字より1つ小さい文字を読み込み、それらがsで指されたバッファに格納すると言います。 '\ 0'はバッファ内の最後の文字 'になります。だから、 'fgets()'の呼び出しで25を持つことは安全です。私はこのコードを25文字より長い行でテストしました。動作しない理由は、バッファリングです。 'fflush(fp)'を追加するとそれが解決されました。 後半のコメントをお詫び申し上げます。 – Bhaskar