免费注册 查看新帖 |

Chinaunix

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

请教一个简单C的文件程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-23 10:47 |只看该作者 |倒序浏览
本帖最后由 dacaisha 于 2010-12-23 15:08 编辑

我在linux下写了一下代码,有几点不明白,还望各位高手指点:
fp指向的源文件为:
0 0 9 0 0 0 0
0 0 0 0 9 4 6
0 2 3 4 5 6 7
3 4 5 6 9 0 8
3 4 5 6 2 0 2

#include<stdio.h>
#include<stdlib.h>
int main(int argc,char *argv[])
{
        short int num[5][7];
        FILE *fp,*fa;
        int byte=0;
        short int (*p)[7];
        p=num;

        
        if((fa=fopen(argv[2],"wb"))==NULL)
        {
                printf("Can not open file %s\n",argv[2]);
                exit(1);
        }
                                                                                                                             
        if((fp=fopen(argv[1],"rb"))==NULL)
        {
                printf("Can not open file %s\n",argv[1]);
                exit(1);
        }

        printf("%p %p\n",*p,num);      

        while(byte=fread(p,sizeof(short int,7,fp))
        {
             fwrite(p,sizeof(short int),byte,fa);         // 当我把程序中的short int都改成int时为什么每运行一步fwrite,都会写入两行呢,比如第一次运行时,目标文件中内容是

0 0 9 0 0 0 0
0 0 0 0 9 4 6  改成short int程序又正常呢?     



             printf("%d\n",**p);                                      // 这时候对p进行**p运算,为什么打印出来是一大串数字呢?而不是源文件二维数组中的某个元素呢?
          }

                  C语言新手,还望高手指点。。谢谢~!

论坛徽章:
0
2 [报告]
发表于 2010-12-23 12:05 |只看该作者
把fread 和 fwrite搞明白...

论坛徽章:
0
3 [报告]
发表于 2010-12-23 15:02 |只看该作者
就是搞了两天没弄明白,才发帖问高手的。。。

论坛徽章:
0
4 [报告]
发表于 2010-12-23 17:19 |只看该作者
对于16位机时sizeof(short int) = sizeof(int) = 2
对于32位机时sizeof(int) = 2 * sizeof(short int) = 2 * 2 = 4
明白了么?

论坛徽章:
0
5 [报告]
发表于 2010-12-23 17:23 |只看该作者
char占一个字节,short int两个字节,int四个字节,一个short int刚好是一个数字加一个空格这两个字符的大小,你读了7个这样的大小刚好是一行,int是两倍,就是两行,好好看看man手册里对函数的解释吧

论坛徽章:
0
6 [报告]
发表于 2010-12-24 09:30 |只看该作者
嗯,有点明白了。。谢谢!!!!那第二个问题,对p进行**p运算,为什么打印出来是一大串数字,而不是源文件二维数组中的某个元素呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP