免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: lixforalpha
打印 上一主题 下一主题

[C] c语言 关于文件的两个问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2003-12-25 15:53 |只看该作者

c语言 关于文件的两个问题

先向大家说声对不起,过了这么长时间才回贴!实在不好意思
       为保证不受平台及编译系统的影响,以如下代码分别在Redhat8+gcc Win2K Pro+vc6  Win2kPro + turboc2 Win98 SE+turboc2 四个平台下,编译执行
#include "stdio.h"
int test(void)
{int n;
char c;
FILE *fp;
  if((fp=fopen("f:\\tc\\fput1\\fputc.dat","wb")==NULL) return 1;
   for(n=0;n<10;n++)
     {c=getchar();
      fputc(c,fp);
     }
fclose(fp);
return 0;
}
int fcopy(void)
{FILE *fp,*fp1;
if((fp=fopen("f:\\tc\\fput1\\fputc.dat","rb")==NULL) return 1;
if((fp1=fopen("f:\\tc\\fput1\\fputc1.dat","wb")==NULL) return 1;
while(!feof(fp)) fputc(fgetc(fp),fp1);
fclose(fp);
fclose(fp1);
return 0;
}
main()
{if(test())printf("File not create!";
if(fcopy()) printf("File not copyed!";
printf("file successful copyed!";
return 0;
}

几个平台,源代码只改动路径一项:
图1 Redhat8 + gcc       //mnt//win98//my-do//test//
图2 Win2kPro + vc6      f:\\tc\\fput1\\fputc\\Debug\\
图3 Win2kPro + turboc2  f:\\tc\\fputc\\temp\\
图4 Win98SE + turboc2   d:\\my-do\\

大体一看,使用这段代码,只有Win2kPro + turboc2平台产生不正常结果。Redhat8 X下与终端的显示结果也不一样(终端下没能剪图,X下的cat命令也不能显示内容)。其实仔细看一下生成.dat文件的大小,四个平台下fputc1.dat总是会比fputc.dat文件多出一字节,使用vi打开则是一个问号,UltraEdit以16进制打开则是FF。对于多出来的FF这个字节会不会影响数据的处理,我现在还没做测试!

结果如图所示:

Redhat8.gif (21.25 KB, 下载次数: 41)

图1 Redhat8 + gcc

图1 Redhat8 + gcc

Win2k-pro-vc6.gif (8.01 KB, 下载次数: 40)

图2 Win2kPro + vc6

图2 Win2kPro + vc6

论坛徽章:
0
12 [报告]
发表于 2003-12-25 16:06 |只看该作者

c语言 关于文件的两个问题

剩下的图

Win2k-pro-tc.gif (5.46 KB, 下载次数: 33)

图3 Win2k Pro + turboc2

图3 Win2k Pro + turboc2

win98.gif (3.65 KB, 下载次数: 43)

图4 Win98 + turboc2

图4 Win98 + turboc2

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
13 [报告]
发表于 2003-12-25 16:12 |只看该作者

c语言 关于文件的两个问题

上面的2图中没有不正常的结果啊。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
14 [报告]
发表于 2003-12-25 16:12 |只看该作者

c语言 关于文件的两个问题

上面的2图中没有不正常的结果啊。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
15 [报告]
发表于 2003-12-25 16:12 |只看该作者

c语言 关于文件的两个问题

上面的2图中没有不正常的结果啊。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
16 [报告]
发表于 2003-12-25 16:12 |只看该作者

c语言 关于文件的两个问题

上面的2图中没有不正常的结果啊。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
17 [报告]
发表于 2003-12-25 19:17 |只看该作者

c语言 关于文件的两个问题

我试验了一下,在linux下没有楼主说的问题啊。而在win2000下,的确在第二个文件的末尾多出了FF,但是显示不出来。我想这是系统的差异吧,待我再查查资料。
还有,在linux下文件的路径要只用一个“/”,win下是因为“\”是转义字符,所以要用两个。

我这网络慢,上面的多点了好多下,也不知道怎么删掉,大家见谅。

论坛徽章:
0
18 [报告]
发表于 2003-12-25 20:37 |只看该作者

c语言 关于文件的两个问题

[quote]原帖由 "lixforalpha"]四个平台下fputc1.dat总是会比fputc.dat文件多出一字节,[/quote 发表:


多出一个字节是因为你的程序写得不对。如果你一直用getc,就不要用 feof来判断是否结束,应该以

fegtc () != EOF 来判断。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
19 [报告]
发表于 2003-12-25 22:13 |只看该作者

c语言 关于文件的两个问题

楼上的,这个是为什么呢?详细解释一下吧。

论坛徽章:
0
20 [报告]
发表于 2003-12-26 00:06 |只看该作者

c语言 关于文件的两个问题

原帖由 "aero"]上面的2图中没有不正常的结果啊。[/quote 发表:

图3   win2k pro + turboc2  不正常
你说的转义字符是个问题,不过在linux下使用 //mnt//win98//可以正常输出到,指定路径的!




[quote]原帖由 "win_hate" 发表:


多出一个字节是因为你的程序写得不对。如果你一直用getc,就不要用 feof来判断是否结束,应该以

fegtc () != EOF 来判断。


把while(!feof(fp)) fputc(fgetc(fp),fp1);改成
while(fgetc(fp)!=EOF) fputc(fgetc(fp),fp1);
结果就更有意思了!
看下图:

wan-win2k-vc6.gif (2.93 KB, 下载次数: 37)

win2k + vc6

win2k + vc6

wan-win2k-tc.gif (2.37 KB, 下载次数: 36)

win2k + turboc2

win2k  + turboc2
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP