有关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);