fwrite将垃圾值写入文件 #包括 结构类型 { int d; }; int main() { 结构类型*cust; cust->d=13; 文件*fp; fp=fopen(“文件路径”、“wb+”); 或 fp=fopen(“文件路径”,“w+”); fwrite(cust,sizeof(struct-struct_类型),1,fp); fclose(fp); 返回0; }

fwrite将垃圾值写入文件 #包括 结构类型 { int d; }; int main() { 结构类型*cust; cust->d=13; 文件*fp; fp=fopen(“文件路径”、“wb+”); 或 fp=fopen(“文件路径”,“w+”); fwrite(cust,sizeof(struct-struct_类型),1,fp); fclose(fp); 返回0; },c,fwrite,C,Fwrite,预期产出 十三, 但是,获取写入文件的垃圾值。假设您为cust分配了内存,或者使用了普通结构而不是指针,则会得到一个包含平台上int 13二进制表示形式的文件。这在记事本里是看不懂的 如果您在十六进制编辑器中查看输出,您将看到几个零字节和一个0xOD-零字节的数量取决于平台上INT的大小,它们是在13字节之前还是之后取决于它的尾数 如果您想要一个包含13作为文本的文件,请使用fprintf (由于您尚未分配内存,因此您的程序具有未定义的行为,可以执行任何操作。) 使用堆栈上的结构修复: #in

预期产出

十三,


但是,获取写入文件的垃圾值。

假设您为
cust
分配了内存,或者使用了普通结构而不是指针,则会得到一个包含平台上int 13二进制表示形式的文件。这在记事本里是看不懂的

如果您在十六进制编辑器中查看输出,您将看到几个零字节和一个
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+");

  or,

  fp = fopen("path to file", "w+");     

  fwrite(cust, sizeof(struct struct_type), 1, fp);

  fclose(fp);

  return 0;

}
要获取文本文件,请将
fwrite
替换为:

$ gcc -Wall -std=c99 -pedantic t.c
$ ./a.out 
$ hexdump -C path_to_file 
00000000  0d 00 00 00                                       |....|
00000004

并从开放模式中删除“b”,因为这是用于二进制I/O的。

假设您为
cust
分配了内存,或者使用了普通结构而不是指针,那么您将在平台上得到一个包含int 13二进制表示形式的文件。这在记事本里是看不懂的

如果您在十六进制编辑器中查看输出,您将看到几个零字节和一个
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+");

  or,

  fp = fopen("path to file", "w+");     

  fwrite(cust, sizeof(struct struct_type), 1, fp);

  fclose(fp);

  return 0;

}
要获取文本文件,请将
fwrite
替换为:

$ gcc -Wall -std=c99 -pedantic t.c
$ ./a.out 
$ hexdump -C path_to_file 
00000000  0d 00 00 00                                       |....|
00000004

并从打开模式中删除“b”,因为这是用于二进制I/O的。

将菜单分配给结构指针
cust

fwrite(cust,sizeof(struct-struct_类型),1,fp)

将二进制数据写入文件

存在的数据是二进制数据,而不是垃圾数据

若要查看它是否正确写入,请将其读入对象并打印

使用
fread()

另一种方法是将整数转换为字符串并写入文本文件


然后您可以看到13。

将菜单分配给您的结构指针
cust

fwrite(cust,sizeof(struct-struct_类型),1,fp)

将二进制数据写入文件

存在的数据是二进制数据,而不是垃圾数据

若要查看它是否正确写入,请将其读入对象并打印

使用
fread()

另一种方法是将整数转换为字符串并写入文本文件


然后您可以看到13。

是的,谢谢,情况就是这样,但无论我使用w+还是wb++1作为答案,数据都是相同的
w
模式将文件截断为零长度或创建文本文件进行写入<代码>wb
模式将文件截断为零长度或创建二进制文件进行写入。字符“b”应无效,但允许符合ISO C标准。请参阅,是的,谢谢,情况就是这样,但无论我使用w+还是wb++1作为答案,数据都是相同的
w
模式将文件截断为零长度或创建文本文件以供写入<代码>wb
模式将文件截断为零长度或创建二进制文件进行写入。字符“b”应无效,但允许符合ISO C标准。看到和