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