-5

モード「wb」で「asklfj123」をファイルに書き込んで、それを vim で開きます。wbモードで書いてもプログラムはASCIIコードに変換しないのに、エディタはASCIIコードで開くので、テキストエディタではガベージ値になるはずですよね?なぜ私はまだそれらを見ることができるのですか?

4

1 に答える 1

1

バイナリモードは「何も翻訳しない」ことを意味します。

「テキスト」モード (つまり、「バイナリ モードではない」) では、一部のシステムでは、OS のファイル表現と'\n'C が改行表現に使用する標準との間で、たとえば改行の表現が異なります。

一部のシステムでは、ファイルの終わりを表す特殊文字もあります。テキスト モードの場合、これらの文字は変換され、それぞれ改行とファイルの終わりを意味するものとして理解されます。

さて、「バイナリ」モードでのテキストの書き込みは問題なく機能します。問題は別のものであると思われます-コードがなければ、何に答えるのも不可能です。また、 について言及vimすると、Linux やその他の Unix ベースのシステムを使用していると思われます。この場合、改行は実際には と同じ'\n'であるため、これらのシステムでは変換は行われません。

編集:

コードを考えると、それは典型的な「未定義の動作」です。

char test[30] = "adadsf123";
...
fwrite(test, sizeof(double), 6, fp);

の引数fwriteは、書き込まれるデータ、各メンバーのサイズ、およびアイテムの数であり、最後に書き込み先のファイル オブジェクトです。

この場合、30 バイトの文字列が入力として与えられ、次に sizeof(double) が各項目のサイズとして与えられ、6 つの項目が与えられます。sizeof(double)が 30 を超えているため、ランダムなガベージが出力されています。そのランダムなガベージが何であるかは、test変数の後のメモリに格納されているものに依存します。投稿されたコードでは、それがfp変数のようです。fpの値がどうなるかを正確に言うのは難しいです。しかしfwrite、バイナリ ファイルにバイナリ データを書き込んで、言われたことを正確に実行しています。「バイナリ」の ASCII 文字は同じように表示されます。「A」のバイナリ コードは 01000001 であり、ASCII として解釈された場合は「A」として表示され、VIMputcはそれを ASCII として解釈します。

于 2013-08-10T09:56:32.983 に答える