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

fprintf()函数输出字符串到文件,如何打开文件是乱码

2012-02-26 
fprintf()函数输出字符串到文件,怎么打开文件是乱码?#include stdio.hmain(){char *p一千FILE *fp

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);  } 

热点排行