免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2582 | 回复: 15
打印 上一主题 下一主题

[C] 请问环境的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-15 15:10 |只看该作者 |倒序浏览
我看linux 程序设计由段代码,我运行了下
代码如下
  1. #include <unistd.h>
  2. #include <stdio.h>
  3. #include <sys/mman.h>
  4. #include <fcntl.h>
  5. #include <stdlib.h>

  6. typedef struct {
  7.    int integer;
  8.    char string[24];
  9. } RECORD;

  10. #define NRECORDS (100)

  11. int main()
  12. {
  13.   RECORD record;
  14.   int i;
  15.   FILE *fp;

  16.   fp=fopen("records.dat", "w+");
  17.   for(i=0; i<NRECORDS; i++){
  18.       record.integer = i;
  19.       sprintf(record.string,"RECORD-%d",i);
  20.       fwrite(&record,sizeof(record),1,fp);
  21.   }
  22.   fclose(fp);
  23.   exit(0);
  24. }
复制代码


运行了之后records.dat的内容是这样的
[quote][root@HuQing c]# cat records.dat
RECORD-0

论坛徽章:
0
2 [报告]
发表于 2008-12-15 15:15 |只看该作者
record没有初始化
使用前可以memset 或者 bzero一下
你在循环里重复使用record之前也要初始化一下

论坛徽章:
0
3 [报告]
发表于 2008-12-15 15:20 |只看该作者
原帖由 FuriousFive 于 2008-12-15 15:15 发表
record没有初始化
使用前可以memset 或者 bzero一下
你在循环里重复使用record之前也要初始化一下


integer和string要分开初始化还是可以整个初始化这个struct?

论坛徽章:
0
4 [报告]
发表于 2008-12-15 15:29 |只看该作者
memset(&record,0,sizeof(record)) ;

论坛徽章:
0
5 [报告]
发表于 2008-12-15 15:45 |只看该作者
还是不行啊
  1. [root@HuQing c]# cat record.c
  2. #include <unistd.h>
  3. #include <stdio.h>
  4. #include <sys/mman.h>
  5. #include <fcntl.h>
  6. #include <stdlib.h>
  7. #include <string.h>

  8. typedef struct {
  9.    int integer;
  10.    char string[24];
  11. } RECORD;

  12. #define NRECORDS (100)

  13. int main()
  14. {
  15.   RECORD record;
  16.   int i;
  17.   FILE *fp;
  18.   fp=fopen("records.dat", "w+");
  19.   for(i=0; i<NRECORDS; i++){
  20.       bzero(&record,sizeof(record));
  21.       record.integer = i;
  22.       sprintf(record.string,"RECORD-%d",i);
  23.       fwrite(&record,sizeof(record),1,fp);
  24.   }
  25.   fclose(fp);
  26.   exit(0);
  27. }
  28. [root@HuQing c]# gcc record.c
  29. [root@HuQing c]# ./a.out
复制代码


运行的结果如下:
[root@HuQing c]# cat records.dat
RECORD-0RECORD-1RECORD-2RECORD-3RECORD-4RECORD-5RECORD-6RECORD-RECORD-8    RECORD-9
RECORD-10
         RECORD-11
RECORD-13   RECORD-14               RECORD-15RECORD-16RECORD-17RECORD-18RECORD-19RECORD-20RECORD-21RECORD-22RECORD-23RECORD-24RECORD-25RECORD-26RECORD-27RECORD-28RECORD-29RECORD-30RECORD-31 RECORD-32!RECORD-33"RECORD-34#RECORD-35$RECORD-36%RECORD-37&RECORD-38'RECORD-39(RECORD-40)RECORD-41*RECORD-42+RECORD-43,RECORD-44-RECORD-45.RECORD-46/RECORD-470RECORD-481RECORD-492RECORD-503RECORD-514RECORD-525RECORD-536RECORD-547RECORD-558RECORD-569RECORD-57:RECORD-58;RECORD-59<RECORD-60=RECORD-61>RECORD-62?RECORD-63@RECORD-64ARECORD-65BRECORD-66CRECORD-67DRECORD-68ERECORD-69FRECORD-70GRECORD-71HRECORD-72IRECORD-73JRECORD-74KRECORD-75LRECORD-76MRECORD-77NRECORD-78ORECORD-79PRECORD-80QRECORD-81RRECORD-82SRECORD-83TRECORD-84URECORD-85VRECORD-86WRECORD-87XRECORD-88YRECORD-89ZRECORD-90[RECORD-91\RECORD-92]RECORD-93^RECORD-94_RECORD-95`RECORD-96aRECORD-97bRECORD-98cRECORD-99[root@HuQing c]#


进入vi是这个
1 ^@^@^@^@RECORD-0^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@RECORD-1^@^@^@^@^@^@^@^        @^@^@^@^@^@^@^@^@^B^@^@^@RECORD-2^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^C^@^@^@RECORD        -3^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^D^@^@^@RECORD-4^@^@^@^@^@^@^@^@^@^@^@^@^@^@^        @^@^E^@^@^@RECORD-5^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^F^@^@^@RECORD-6^@^@^@^@^@^@        ^@^@^@^@^@^@^@^@^@^@^G^@^@^@RECORD-7^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^H^@^@^@REC        ORD-8^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@        ^@^@^@RECORD-9^@^@^@^@^@^@^@^@^@^@        ^@^@^@^@^@^@
2 ^@^@^@RECORD-10^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^K^@^@^@RECORD-11^@^@^@^@^@^@^@^@^        @^@^@^@^@^@^@^L^@^@^@RECORD-12^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^M^@^@^@RECORD-13^@        ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^N^@^@^@RECORD-14^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^O^@        ^@^@RECORD-15^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^P^@^@^@RECORD-16^@^@^@^@^@^@^@^@^@^        @^@^@^@^@^@^Q^@^@^@RECORD-17^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^R^@^@^@RECORD-18^@^@        ^@^@^@^@^@^@^@^@^@^@^@^@^@^S^@^@^@RECORD-19^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^T^@^@        ^@RECORD-20^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^U^@^@^@RECORD-21^@^@^@^@^@^@^@^@^@^@^        @^@^@^@^@^V^@^@^@
.....

[ 本帖最后由 smallstar001 于 2008-12-15 16:04 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-12-15 15:50 |只看该作者
lz 你用fwrite把结构体输入到文件里,就不是给你看的,是给程序看的。。。

只要你再用fread读出来的对,就可以了

如果想写到文件里给自己看,还是用fprintf吧

论坛徽章:
0
7 [报告]
发表于 2008-12-15 16:00 |只看该作者
原帖由 5毛党党员 于 2008-12-15 15:50 发表
lz 你用fwrite把结构体输入到文件里,就不是给你看的,是给程序看的。。。

只要你再用fread读出来的对,就可以了

如果想写到文件里给自己看,还是用fprintf


这个程序该怎么改我看records.dat的时候才正常了呢??

改来改去还是不行。

论坛徽章:
0
8 [报告]
发表于 2008-12-15 16:05 |只看该作者
fwrite是用来写二进制结构体的
像六楼说的一样,你用fprintf写自己想要的格式就行了

论坛徽章:
0
9 [报告]
发表于 2008-12-15 16:10 |只看该作者
原帖由 smallstar001 于 2008-12-15 16:00 发表


这个程序该怎么改我看records.dat的时候才正常了呢??

改来改去还是不行。

用fprintf(fp , "RECORD-%d\n",i); 代替fwrite。
lz并没有说那些数据是你要记录的

论坛徽章:
0
10 [报告]
发表于 2008-12-15 16:25 |只看该作者
原帖由 5毛党党员 于 2008-12-15 16:10 发表

用fprintf(fp , "RECORD-%d\n",i); 代替fwrite。
lz并没有说那些数据是你要记录的


就是struct写进文件啊

需要得数据还是和原意相同
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP