[解決済み] fread/fwriteがsizeとcountを引数に取る根拠は何ですか?
質問
私たちは職場で、なぜ fread() と fwrite() は、単にバッファとサイズを受け取るのではなく、メンバーごとのサイズとカウントを受け取り、読み書きのメンバー数を返します。私たちが思いついた唯一の用途は、プラットフォームのアライメントによって均等に分割できない構造体の配列を読み取り/書き込みたい場合であり、そのために水増しされていますが、設計上のこの選択を保証するほど一般的ではないでしょう。
から fread(3) :
<ブロッククオート関数fread()は、nmemb個のデータ要素を読み込み、それぞれのサイズはバイト長です。 ストリームから読み出し、ptrで指定された場所に格納します。 ptrによって指定された場所に格納します。
関数fwrite()は、nmemb個のデータの要素を、それぞれのサイズバイト のデータを、streamによって指されるストリームに書き込みます。 ptrによって与えられる。
<ブロッククオートfread()とfwrite()は、読み取りまたは書き込みに成功したアイテムの数を返します。 (つまり、文字数ではありません)。 エラーが発生した場合、または に達した場合、戻り値は短いアイテム数(またはゼロ)です。
どのように解決するのですか?
それは ファイル が実装されている方法に基づいています。
Single UNIX 仕様では
各オブジェクトについて、サイズコールは fgetc()関数に呼び出され、その結果は 読み込まれた順に、結果が オブジェクトに重なる符号なしcharの配列に の配列に格納されます。
fgetc には、こんな注意書きもあります。
fgetc() はバイトを操作するので。 複数のバイトからなる文字を読む 複数バイトからなる文字(またはquot;a multi-byte character")を読み取るには、複数回の呼び出しが必要です。 を複数回呼び出す必要がある場合があります。 を複数回呼び出す必要があるかもしれません。
もちろん、これはUTF-8のような派手な可変バイト文字エンコーディングより前のものです。
SUSは、これが実際にはISO C文書から取られたものであることを指摘しています。
関連
-
Solve Dev-c++ [エラー] 'for' ループの初期宣言は、C99 または C11 モードでのみ許可されます。
-
[解決済み] PTHREAD_MUTEX_INITIALIZER vs pthread_mutex_init ( &mutex, param )
-
[解決済み] munmap_chunk(): 無効なポインタ
-
[解決済み] C言語で%sを正しく使う - 超基本レベル
-
[解決済み] CコードでEOFを表現する?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] C言語で配列のサイズを決定するにはどうすればよいですか?
-
[解決済み] 配列のすべてのメンバーを同じ値で初期化するには?
-
[解決済み] ++iとi++の違いは何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
_CRT_SECURE_NO_WARNINGS エラーメッセージ、解決方法
-
libc++abi.dylib: NSException タイプの捕捉されない例外で終了するエラー
-
initializer element is not constant "というエラーが表示されるのですが?
-
[解決済み] PTHREAD_MUTEX_INITIALIZER vs pthread_mutex_init ( &mutex, param )
-
[解決済み] C言語の**はどういう意味ですか?
-
[解決済み] C言語で配列のサイズを決定するにはどうすればよいですか?
-
[解決済み] プログラム終了前にmallocの後にfreeをしないと本当に何が起こるのか?
-
[解決済み] char s[]とchar *sの違いは何ですか?
-
[解決済み] C言語でファイルが存在するかどうかを確認する最も良い方法は何ですか?
-
[解決済み] FortranはC言語よりも重い計算を最適化しやすいですか?