C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 52 を表示中)
■28679 / )  Re[25]: バイナリコード内の16進数での文字列検索
□投稿者/ .SHO (237回)-(2008/11/28(Fri) 18:11:15)
No28677 (επιστημη さん) に返信

> そじゃなくてぇ... それは"いくつでも戻せる実装"のソースを読んだからじゃなくて?
> 標準関数の「仕様としてどうか」ってことです。
> ストリームに戻せるのは一個だけだったと記憶してんですけどー

了解です。正確に書きますね。
一応戻せるんですけど ungetc で戻して処理が保障されるのは一個だけです。

なぜかと言うとFILE構造体の中では256バイトのリングバッファを持っていて
fgetcとして1バイト読みだしても、内部では256バイトの塊でファイルから読込み
そこから1バイトを返してます。
ungetc は、そのポインターを戻して指定された文字を格納してるだけなんです。
ですから、この256バイトの境界をまたいでのungetcは出来ないというのが
正しい答えなんですが、標準関数の仕様としては1バイトしか保証しない
という言い方をしてます。
まぁ、通常は1個しか戻せないと覚えておいて問題はないと思います。
従って、ungetcを複数回呼び出す必要がある場合は、バイト数分前にseekする
のが正解です。

返信 編集キー/


管理者用

- Child Tree -