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标准。看到和