[解決済み] fgets()でstdinから読み込むには?
2022-03-04 18:03:51
質問
ターミナルウィンドウから行を読み取るために以下のコードを書きましたが、問題はコードが無限ループに陥ってしまうことです。行/文の長さは不定なので、バッファに部分的に読み込んでから、それを別の文字列に連結し、それを
realloc
を適宜選択してください。どなたか私の間違いを指摘するか、これを達成するためのより良い方法を提案していただけませんか?
#include <stdio.h>
#include <string.h>
#define BUFFERSIZE 10
int main (int argc, char *argv[])
{
char buffer[BUFFERSIZE];
printf("Enter a message: \n");
while(fgets(buffer, BUFFERSIZE , stdin) != NULL)
{
printf("%s\n", buffer);
}
return 0;
}
解決方法は?
ここでは、連結して解決する方法を紹介します。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFERSIZE 10
int main() {
char *text = calloc(1,1), buffer[BUFFERSIZE];
printf("Enter a message: \n");
while( fgets(buffer, BUFFERSIZE , stdin) ) /* break with ^D or ^Z */
{
text = realloc( text, strlen(text)+1+strlen(buffer) );
if( !text ) ... /* error handling */
strcat( text, buffer ); /* note a '\n' is appended here everytime */
printf("%s\n", buffer);
}
printf("\ntext:\n%s",text);
return 0;
}
関連
-
[解決済み】Linuxでexeclp()がどのように動作するのか理解できません。
-
[解決済み】C言語で入力が整数型かどうかチェックする
-
[解決済み】未定義参照 makefile が間違っているのかも?
-
[解決済み】なぜか。"エラー: 配列型を持つ式への代入"
-
[解決済み】execvp: バッドアドレスエラー
-
[解決済み] fgets()の入力から末尾の改行文字を削除しました。
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み】C言語の関数ポインタはどのように機能するのですか?
-
[解決済み】Nodeでstdinから一行ずつ読み込む方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Valgrind - strcpyのサイズ1の無効な書き込み
-
[解決済み】単項演算子「*」の型が無効(「int」がある)C言語でのエラー
-
[解決済み] Connect: ソケット以外でのソケット操作
-
[解決済み] (.text+0x20): `main'への未定義の参照と関数への未定義の参照
-
[解決済み】ISO C90では、C言語での宣言とコードの混在が禁止されています。
-
[解決済み】エラー:イニシャライザー要素がロード時に計算可能でない
-
[解決済み】C言語のフォーマット文字列でデータ引数が使用されない [重複]。
-
[解決済み】なぜか。"エラー: 配列型を持つ式への代入"
-
[解決済み】.axfファイルとは何ですか?
-
[解決済み】Linuxソケットのwrite()でBad File Descriptorが発生するC