读书人

fprintf()函数输出字符串到文件如何

发布时间: 2012-02-26 20:19:44 作者: rapoo

fprintf()函数输出字符串到文件,怎么打开文件是乱码?
#include "stdio.h"
main()
{
char *p="一千";
FILE *fp = fopen("test.txt", "w");
fprintf(fp, "%s", p);
fclose(fp);
}

这个程序将输出字符串"一千"到文件test.txt当中。可是在程序执行完毕之后,用记事本打开文件的时候,只发现两个小黑块。请问这是为什么?如何解决这样的问题。类似的,还有字符串"十"。

[解决办法]
1,字符编码的问题,你在记事本上设置一下就可以了.
2,FILE *fp = fopen("test.txt", "w"); 改成FILE *fp = fopen("test.txt", "wb");
[解决办法]
设置字符编码,
fopen 参数就不需要修改了
[解决办法]
记事本吧.
点保存的时候可以看到最下面有一栏编码的选择.
[解决办法]
这个问题是编码上的巧合导致的.就好比单输入"联通"二字,再次打开就是乱码,一个道理.
你只要多输入几个字符就没问题了.
[解决办法]
楼主我的问题和你的有点类似:
我是把from.txt中的文件中的字符个数按“个数-字符“的形式统计到to.txt文件中,程序如下:
#include <stdio.h >
void main()
{
FILE *from,*to;
char str[256],s[10],ch1,ch2,*p;
int cnt;
clrscr();
if((from=fopen("from.txt","r"))==NULL)
{
printf("Can 't open read file!\n");
exit(1);
}
if((to=fopen("to.txt","w"))==NULL)
{
printf("Can 't open write file!\n");
exit(1);
}
str[0]= '\0 ';
fgets(str,256,from);//这里我假设文件中只有一行字符
p=str;
ch1=*p++;
ch2=*p++;
while(ch1)
{
cnt=1;
while(ch1==ch2)
{
cnt++;
ch1=ch2;
ch2=*p++;
}
sprintf(s,"%d-%c,",cnt,ch1);
puts(s);
fputs(s,to);
ch1=ch2;
if(ch2)
ch2=*p++;
}
fclose(from);
fclose(to);
}
执行完后,我发现我的to.txt文件中是一些黑方框,不是我要的答案,而我如果不向to.txt中写,直接输出到屏幕的话,答案
是正确的,问题应该出现在对to文件的写操作过程中,可我怎么也看不出来..
楼主对我这个问题有什么建议吗?
我的是向文件中直接写字符,不是汉字,按说应该不会出现乱码的问题啊...
大家帮忙看看,弄不懂这个问题真的很郁闷的。
[解决办法]
楼上写的乱七八糟,没时间看呀
[解决办法]
7楼的代码:

C/C++ code
#include  <stdio.h  >  void main()  {      FILE *from,*to;      int slen=0;    char str[256],s[50],ch1,ch2,*p;      int cnt;      //clrscr();      if((from=fopen("from.txt","r"))==NULL)      {          printf("Can 't open read file!\n");          exit(1);      }      if((to=fopen("to.txt","w"))==NULL)      {          printf("Can  't open write file!\n");          exit(1);      }      str[0]=  '\0';      fgets(str,256,from);//这里我假设文件中只有一行字符      p=str;      //ch1=*p++;      //ch2=*p++;    slen=strlen(str);    while(slen)      {          ch1=str[slen-1];        if(ch1==0)        {            --slen;            continue;        }        cnt=1;        for(int i=0;i<slen-1;i++)        {            if(str[i]==ch1)            {                ++cnt;                str[i]=0;            }        }        sprintf(s,",%d-%c",cnt,ch1);  //把分隔豆号打在了前面.破坏编码的巧合.记事本就能正确识别了.        puts(s);         fputs(s,to);                //ch1=ch2;          //if(ch2)          //    ch2=*p++;         --slen;    }      fclose(from);      fclose(to);  } 

读书人网 >C语言

热点推荐