首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

有关fopen的有关问题,

2012-02-14 
有关fopen的问题,急!!!!!!我用fopen打开一个文本文件后,写入一串字符,然后第二次运行程序从后面接着写入,

有关fopen的问题,急!!!!!!
我用fopen打开一个文本文件后,写入一串字符,然后第二次运行程序从   后面接着写入,可是出现这样的情况,第一,三……等奇数次写入后,我记事本打开文本文件显示为我写入的字符,但是第二,四……偶数次写入后,记事本打开文本文件后显示为乱码,请问时什么原因??
代码如下:
#include   "stdio.h "
#include   "conio.h "
#include   "stdlib.h "
main()    
{    
        int   a[7]={12,24,56,78,32,67,55};    
        char   cha[7][3];
FILE   *fp;    

if((fp=fopen( "test1.txt ", "a "))==NULL)    
{    
printf( "cann 't   open   file   test.txt ");    
return(0);    
}    

for(int   i=0;   i <7;   i++)
{
itoa(a[i],cha[i],10);
}

for(i=0;i <7;++i)
{    
fwrite((cha+i),sizeof(cha[i]),1,fp);
}    

fclose(fp);    

printf( "数字为\n ");    
for(i=0;i <7;i++)    
printf( "%d     ",a[i]);    
}

[解决办法]
fwrite((cha+i),sizeof(cha[i]),1,fp);
===>
fwrite((cha+i),sizeof(cha[i])-1,1,fp); //不写入最后的 '\0 '字符

或者
fwrite((cha+i), sizeof(char)*strlen(cha[i]),1,fp); //还是不写入最后的 '\0 '字符.

你原来的方法用wordpad(写字板)打开没有问题, 但用notepad(记事本)打开,就有如你所述的毛病, 好象是notepad对 '\0 '的解释有问题.


[解决办法]
if((fp=fopen( "test1.txt ", "a "))==NULL)
--------------
if((fp=fopen( "test1.txt ", "ab "))==NULL)
不行!

if((fp=fopen( "test1.txt ", "a "))==NULL) //二进制时用a,你是TXT所以后面引用

fwrite((cha+i),sizeof(cha[i]),1,fp);-》fputs((char*)(cha+i), fp);

热点排行