#include<stdio.h>
#include<stdlib.h>
int main()
{
char str[26];
FILE *fp;
if((fp=fopen("字符串.dat","w"))==NULL)
{
printf("can't find the file!\n");exit(0);
}
gets(str);
fwrite(str,1,27,fp);
fclose(fp);
if((fp=fopen("字符串.dat","r"))==NULL)
{
printf("can't find the file!\n");exit(0);
}
fread(str,1,26,fp);
printf("%s\n",str);
fclose(fp);
return 0;
}
输入a----z 26个字母文件里显示的是正确的,但是用
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
char str[26];
if((fp=fopen("字符串.dat","r"))==NULL)
{
printf("can't find the file!\n");exit(0);
}
fwrite(str,1,26,fp);fputs("\n",fp);
printf("%s\n",str);
fclose(fp);
return 0;
}
读取时读出的却是乱码,小弟是菜鸟,请教各位大侠!!!
我把所有的26改为27
这样就不会出现缓冲区不够的问题了,也省去了str[26]='\0'
可以么?
不能省去str[26]='\0', 特别是第二个程序,缓冲区没有初始化,要是刚好 str[26] 不是 ‘\0’ ,字符串就没有结尾,后面跟着一堆乱码(当然,debug版本的VS会自动初始化倒是看不出来)
后面应该是fread,这个没太注意,str不是在输入的时候给了字符串了么?可不可以不初始化啊?
追答改成fread我这读出来的就不是乱码了
为什么要是27呢?
追答结束符 系统自动给加上的
追问也就是说从文件读入到内存中要比从内存写入到文件要多一个字节喽?
追答是的
fread(str,1,28,fp);
len=sizeof(str);
printf("%d\n",len);
出来就是27
谢谢提醒,我改了,但是输出最后还是有乱码的,请教!!!
追答1 你第一个程序输入的时候字符数少点;
2 将fread(str,1,26,fp);fputs("\n",fp);中的26改为27。