アプリ版:「スタンプのみでお礼する」機能のリリースについて

#include <stdio.h>int main(void)
{
int buf[100] = {10, 100, 1000, 10000};
FILE *file;
file = fopen("test.bin", "wb");
fwrite(buf, sizeof(int), 100, file);
file = fopen("test.txt", "w");
fwrite(buf, sizeof(int), 100, file);
fclose(file);
return 0;
}

バイナリファイルとテキストファイルの2つの形式で保存してファイルの大きさを比較したのですが、両方とも同じ容量でした。
バイナリファイルの方が容量が小さくなるはずなのに同じになってしまうのはなぜなんでしょうか?

A 回答 (6件)

file = fopen("test.txt", "w");


fwrite(buf, sizeof(int), 100, file);
では「テキストファイルで保存」にならない気がしますよ。
試しに、保存したtest.txtを開いてみてください。文字化けして、「テキストファイル」になっていないはずですよ。

int buf[100] を「テキストファイルで保存」というのは、ひょっとして、

file = fopen("test.txt", "w");
for(int i=0; i<100; i++) {
 fprintf(file,"%d ",buf[i]);
}

の意味では?
    • good
    • 0

モードに b の有る無しは、Linux では違いがありません


http://linuxjm.osdn.jp/html/LDP_man-pages/man3/f …
> 文字 'b' を (中略) Linux では無視される。

Windows はあるようです
https://learn.microsoft.com/ja-jp/cpp/c-runtime- …
> LF 文字は出力時に CRLF の組み合わせに変換されます
他にも EOF(1A) 文字の扱いや、Unicode ストリーム出力関数による変換も行われるようです。

LF(0A) と CR(0D) 文字を含まないデータ出力をしたならば、
Windows でも同じ結果になる可能性があります。
    • good
    • 0

「どんな場合でも必ずバイナリファイルの方がテキストファイルより小さい」わけではない.



テキストファイルでは入出力に際してさまざまな変換が行われることがあるが, あくまで「変換が行われることがある」だけであって
・どんな場合でも変換されるわけではない
・変換されるとしても長くなるとは限らない
のだ.

なおどのような変換が行われる (ことがある) のかはシステム依存なので, プログラムだけを出しても意味はない.
    • good
    • 0

No2です。


ちなみに、あなたが提示されたソースをコンパイルして実行すると
windowsならtest.txtは401バイト test.binは400バイトになります。
linuxならtest.txt、test.binともに400バイトになります。
l
    • good
    • 0

OSは何でしょうか。


Windowsならテキストモードの場合、\n<->CR/LF変換が行われサイズが変わりますが、Linuxの場合は、テキストモードとバイナリーモードの区別はないのでサイズは変わりません。
    • good
    • 0

両方とも100バイトで保存しているからですね。

    • good
    • 2
この回答へのお礼

どうすれば良いのでしょうか?

お礼日時:2022/11/01 23:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!