Chinaunix
标题:
请教一个简单C的文件程序
[打印本页]
作者:
dacaisha
时间:
2010-12-23 10:47
标题:
请教一个简单C的文件程序
本帖最后由 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语言新手,还望高手指点。。谢谢~!
作者:
PCliangtao
时间:
2010-12-23 12:05
把fread 和 fwrite搞明白...
作者:
dacaisha
时间:
2010-12-23 15:02
就是搞了两天没弄明白,才发帖问高手的。。。
作者:
unicornSir
时间:
2010-12-23 17:19
对于16位机时sizeof(short int) = sizeof(int) = 2
对于32位机时sizeof(int) = 2 * sizeof(short int) = 2 * 2 = 4
明白了么?
作者:
eossplendid
时间:
2010-12-23 17:23
char占一个字节,short int两个字节,int四个字节,一个short int刚好是一个数字加一个空格这两个字符的大小,你读了7个这样的大小刚好是一行,int是两倍,就是两行,好好看看man手册里对函数的解释吧
作者:
dacaisha
时间:
2010-12-24 09:30
嗯,有点明白了。。谢谢!!!!那第二个问题,对p进行**p运算,为什么打印出来是一大串数字,而不是源文件二维数组中的某个元素呢?
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2