にメモリを割り当てたか、ポインタの代わりに単純な構造体を使用したと仮定すると、プラットフォームの int 13のバイナリcust
表現を含むファイルが得られます。たとえば、メモ帳では読めないでしょう。
16 進エディタで出力を見ると、いくつかのゼロ バイトと 1 つが表示されます。0xOD
ゼロ バイトの数は、プラットフォームの int のサイズによって異なります。また、それらが 13 バイトの前か後かは、そのエンディアン。
13
テキストを含むファイルが必要な場合は、 fprintf
.
(メモリを割り当てていないため、プログラムの動作は未定義であり、何でもできます。)
スタック上の構造体で修正します。
#include <stdio.h>
struct struct_type
{
int d;
};
int main()
{
struct struct_type cust;
cust.d=13;
FILE* fp;
fp = fopen("path_to_file", "wb+");
fwrite(&cust, sizeof(cust), 1, fp);
fclose(fp);
return 0;
}
$ gcc -Wall -std=c99 -pedantic t.c
$ ./a.out
$ hexdump -C path_to_file
00000000 0d 00 00 00 |....|
00000004
代わりにテキスト ファイルを取得するには、次のように置き換えますfwrite
。
fprintf(fp, "%d", cust.d); // or "%d\nd";
オープンモードから「b」を削除します。これは、バイナリ I/O 用であるためです。