Sign-up....

fread fwrite 简单问题

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[])

{

FILE * FPFROM, *FPTO;

char p;

if ((FPFROM = fopen("file.in" ,"rb")) == NULL)

{

printf("errow open read\n");

exit(0);

}

if ((FPTO = fopen ("file.out", "w+b")) == NULL)

{

printf("errow open read\n");

exit(0);

}

while (fread(&p,1,1, FPFROM))

fwrite(&p,1,1, FPTO);

fclose(FPTO);

fclose(FPFROM);

printf("Hello, world!\n");

return EXIT_SUCCESS;

}

这样的代码 没有问题的

但是如果 我想节省fread 的次数

用char p[1024];

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[])

{

FILE * FPFROM, *FPTO;

char p[1024];

if ((FPFROM = fopen("file.in" ,"rb")) == NULL)

{

printf("errow open read\n");

exit(0);

}

if ((FPTO = fopen ("file.out", "w+b")) == NULL)

{

printf("errow open read\n");

exit(0);

}

while (fread(p,1024,1, FPFROM))

fwrite(p,1,124, FPTO);

fclose(FPTO);

fclose(FPFROM);

printf("Hello, world!\n");

return EXIT_SUCCESS;

}

会有错 应该怎么做呢?

[999 byte] By [msdn] at [2007-10-25 21:50:57]
# 1 Re: fread fwrite 简单问题

while (fread(p,1024,1, FPFROM))

fwrite(p,1024,1, FPTO);

我指的不是代码错误 而是 如果文件长的不是1024 的倍数的话

会失败的

benjiam at 2005-8-31 15:07:37 >
# 2 Re: fread fwrite 简单问题

int readLen;

readLen = fread(p, 1024, 1, FPFROM);

while(readLen == 1024)

{

fwrite(p, 1024, 1, FPTO);

fread(p, 1024, 1, FPFRROM);

}

fwrite(p, readLen, 1, FPTO);

peterID at 2005-8-31 15:18:17 >
# 3 Re: fread fwrite 简单问题

回有错吗? 我不太清楚 呵呵 最近混乱~

好象两个中( fread()\fwite() )有一个是可以正常 读\写 的,不过得到的函数的返回值都是错的 !

jixingzhong at 2005-8-31 15:46:50 >
# 4 Re: fread fwrite 简单问题

既然这样,那就减少缓冲空间啊,定义 char a1[512],a2[256],a3[128] ..

然后选择合适的数组来做缓冲 ....

jixingzhong at 2005-8-31 15:47:28 >
# 5 Re: fread fwrite 简单问题

有段错误 ...

benjiam at 2005-8-31 15:51:23 >
# 6 Re: fread fwrite 简单问题

既然这样,那就减少缓冲空间啊,定义 char a1[512],a2[256],a3[128] ..

然后选择合适的数组来做缓冲 ....

现在不是缓冲长度的问题 而是会有字符写不进去啊 因为长的不是缓冲的整数倍

benjiam at 2005-8-31 16:09:55 >
# 7 Re: fread fwrite 简单问题

觉得peterID(peter)的做法应该不会有错的。

ppiy3670 at 2005-8-31 17:05:41 >
# 8 Re: fread fwrite 简单问题

readLen = fread(p, 1024, 1, FPFROM);

p只是一个字符,怎么能够读进去呢?肯定会出现段错误了。

bugebear3 at 2005-9-1 12:54:04 >
# 9 Re: fread fwrite 简单问题

if(fread(p, 1024, 1, FPFROM)!=1)

{ 出错处理!; }

xuanwf at 2005-9-2 13:15:57 >
# 10 Re: fread fwrite 简单问题

当然会有问题了,1024是你开辟的缓冲区上限,不是你fread的实际字节数

你得得到实际读到的字节数,再往文件里写

rd = fread(buf,1,1024,FPFROM);

while (rd>0)

{

fwrite(buf,1,rd,FPTO);

rd = fread(buf,1,1024,FPFROM);

}

:)

sky_cool at 2005-9-2 15:03:52 >
# 11 Re: fread fwrite 简单问题

这样就对了

sky_cool at 2005-9-2 15:04:26 >

C/C++

All Classified