请教如何把结构体数组里的内容用fwrite写到文本文件?谢谢

startstop2015 2015-09-14 08:45:33
请教如何把结构体数组里的内容用fwrite写到文本文件?谢谢
或者其它的和fwrite一样快速的方法?
...全文
1142 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-09-17
  • 打赏
  • 举报
回复
引用 12 楼 startstop2015 的回复:
[quote=引用 9 楼 zhao4zhong1 的回复:] 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息…… 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待 弄混了
谢谢,我看不懂,请教如何用winhex查看结构体数组里保存的内容?[/quote] 参考WinHex联机帮助和网上相关博客文章。 https://www.baidu.com/s?wd=WinHex&rsv_spt=1&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=0&oq=WinHex&rsv_t=b89bhqvghZ9KJ39cyIMmBG7JlkSxv8bcp7lbRrPMKO99GWwYA%2BINke%2BJRuaVThZ%2FebB%2F&rsv_pq=f2d7376a000834ec
startstop2015 2015-09-17
  • 打赏
  • 举报
回复
引用 9 楼 zhao4zhong1 的回复:
电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息…… 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待 弄混了
谢谢,我看不懂,请教如何用winhex查看结构体数组里保存的内容?
赵4老师 2015-09-16
  • 打赏
  • 举报
回复
去问微软。
Mortred_cp 2015-09-16
  • 打赏
  • 举报
回复
引用 9 楼 zhao4zhong1 的回复:
电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息…… 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待 弄混了
为什么要替换啊 赵老师
赵4老师 2015-09-16
  • 打赏
  • 举报
回复
电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息…… 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待 弄混了
startstop2015 2015-09-16
  • 打赏
  • 举报
回复
如何结构体
引用 7 楼 zhao4zhong1 的回复:
[/code]
谢谢 struct stru_salary { double salary[100][15]; char name[100][15]; }; struct stru_salary *array_sal; array_sal=(struct stru_salary *)malloc(sizeof(struct stru_salary)); 此时,我发现不能直接fwrite这个结构体数组,格式是乱的 假设array_sal有100条记录,如何把这100条记录memcpy到其它内存区域, 假设其它内存区域名字是A,然后把A一次性用fwrite写到文本?
赵4老师 2015-09-14
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
#define field_offset(s,f) (int)(&(((struct s *)(0))->f))
struct AD  { int a; char b[13]; double c;};
#pragma pack(push)
#pragma pack(1)
struct A1  { int a; char b[13]; double c;};
#pragma pack(2)
struct A2  { int a; char b[13]; double c;};
#pragma pack(4)
struct A4  { int a; char b[13]; double c;};
#pragma pack(8)
struct A8  { int a; char b[13]; double c;};
#pragma pack(16)
struct A16 { int a; char b[13]; double c;};
#pragma pack(pop)
int main() {
    printf("AD.a %d\n",field_offset(AD,a));
    printf("AD.b %d\n",field_offset(AD,b));
    printf("AD.c %d\n",field_offset(AD,c));
    printf("\n");
    printf("A1.a %d\n",field_offset(A1,a));
    printf("A1.b %d\n",field_offset(A1,b));
    printf("A1.c %d\n",field_offset(A1,c));
    printf("\n");
    printf("A2.a %d\n",field_offset(A2,a));
    printf("A2.b %d\n",field_offset(A2,b));
    printf("A2.c %d\n",field_offset(A2,c));
    printf("\n");
    printf("A4.a %d\n",field_offset(A4,a));
    printf("A4.b %d\n",field_offset(A4,b));
    printf("A4.c %d\n",field_offset(A4,c));
    printf("\n");
    printf("A8.a %d\n",field_offset(A8,a));
    printf("A8.b %d\n",field_offset(A8,b));
    printf("A8.c %d\n",field_offset(A8,c));
    printf("\n");
    printf("A16.a %d\n",field_offset(A16,a));
    printf("A16.b %d\n",field_offset(A16,b));
    printf("A16.c %d\n",field_offset(A16,c));
    printf("\n");
    return 0;
}
//AD.a 0
//AD.b 4
//AD.c 24
//
//A1.a 0
//A1.b 4
//A1.c 17
//
//A2.a 0
//A2.b 4
//A2.c 18
//
//A4.a 0
//A4.b 4
//A4.c 20
//
//A8.a 0
//A8.b 4
//A8.c 24
//
//A16.a 0
//A16.b 4
//A16.c 24
//
//
xiaohuh421 2015-09-14
  • 打赏
  • 举报
回复
一般工作中数据保存, 建议是保存二进制数据, 这时所有数据都是二进制保存在文件中, 查看数据需要UtralEdit这样的二进制数据查看工具. 当然, 如果只为学习, 为了所有数据都以字符串方式展现, 那就格式化成字符串, 然后保存, 读取的时候把字符串再转换回来
  • 打赏
  • 举报
回复
格式化输入比较好,读起来也容易
二班的码农 2015-09-14
  • 打赏
  • 举报
回复
如果要写入文本的话,不能用fwrite了,得用fprintf格式化输出文本。写一个函数,专门负责结体的输出
二班的码农 2015-09-14
  • 打赏
  • 举报
回复
这跟写入一般变量是一样的,参考例子: struct A { int data; }; int main() { A a; a.data = 1; FILE* pfile; pfile = fopen("test.txt", "w"); fwrite(&a, sizeof(a), 1, pfile); fclose(pfile); return 0; }
startstop2015 2015-09-14
  • 打赏
  • 举报
回复
引用 1 楼 jiqiang01234 的回复:
二进制打开写入
谢谢,是写入文本文件啊,具体该怎么实现?
jiqiang01234 2015-09-14
  • 打赏
  • 举报
回复
二进制打开写入

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧