| ■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する のが正解です。
|
|