[解決済み] C - 標準入力から BUFSIZE 文字を一度に読み込む
2022-02-08 06:08:20
質問内容
小さなソケットプログラム(GNU libc)を書いています。ユーザーに入力を求めるループがあります(例:"MSG> ")。ユーザーがエンターキーを押すと、メッセージが送信されます(現在、localhost上のサーバーに送信されています)。
とにかく、stdinからchar buffer[256]に読み込みたいのです。私は現在fgets()を使用していますが、それは私が望むものを行いません。私は256バイトのいくつかの文字列を介して1000バイトのC文字列を送信できるように、一度に256 -1バイトのデータを取得し、ユーザーに尋ねるようなコードをどのように書くのか分からない。
EDIT: コードを追加
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFSIZE 256
int main(int argc, char *argv[])
{
char msg[BUFSIZE];
size_t msgLen;
msgLen = strlen(fgets(msg, BUFSIZE, stdin));
puts(msg);
// This simply checks whether we managed to fill the buffer and tries to get
// more input
while (msgLen == (BUFSIZE - 1))
{
memset (msg, '\0', BUFSIZE);
fread(msg, BUFSIZE, 1, stdin);
msg[BUFSIZE - 1] = '\0';
msgLen = strlen(msg);
puts(msg);
if (msgLen < (BUFSIZE - 1))
break;
}
return 0;
}
解決方法は?
1000バイトを確実に受信するためのループを実装していますよね?ループは見やすくするために、1000までカウントしていることを示すべきです。読み取ったバイト数を記録し(+=演算子を使用)、その数をループの条件に使用します。
を想定しているようですが
fread
は255バイトを読み込みますが、これは255バイトが利用可能であるという無効な前提のもとでの話です。255バイトに満たない場合は、必ずしもエラーにはなりませんので、そのまま読み進めてください。の戻り値が
fread
が0より小さい場合は、心配する必要があります。そのような状況に対応できるようにしましょう。
関連
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] time(1) の出力における 'real', 'user' および 'sys' はどのような意味ですか?
-
[解決済み] grep -R からディレクトリを除外するにはどうすればよいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】識別子 "string "は未定義?
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】Enterキーを押して続行する