c文件读取问题

二郎传说 2008-06-01 11:05:31
读取文件是遇到空格就出现乱码?请问各位大侠怎么回事?
for(i=0;(ch!=EOF)&&(i<96);i++)
{
temstr[i]=ch;
ch = fgetc(fp);
}
printf("%S",temstr);
fclose(fp);

程序如上所示,请问错误的原因是什么?
...全文
207 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
visame 2008-06-02
  • 打赏
  • 举报
回复
最主要的问题还是串结束标志符号吧'\0'
xhd3767 2008-06-01
  • 打赏
  • 举报
回复
楼上的很详细...不过你要是记录文件的大小的话..
例如:
int length;
fseek(fp,0L,SEEK_END);
length = ftell(fp);
然后你在访问的时候注意大小就ok啦..
不过还是不如楼上的添加‘\n’安全..
allen0228 2008-06-01
  • 打赏
  • 举报
回复
%S要小写
冰矿 2008-06-01
  • 打赏
  • 举报
回复
ch!=EOF,temstr[i]=ch :ch还没读取字符就先判断并赋值了;
还有,字符串结尾没有加结束符;

#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
char ch, temstr[97];
FILE *fp = fopen("test.txt","r");
if (fp == NULL)
{
printf("Can't open"); exit(1);
}
for(i=0; ((ch=fgetc(fp))!=EOF)&&(i<96); i++)
temstr[i] = ch;
temstr[i] = '\0';
printf("%s",temstr);
fclose(fp);

system("PAUSE");
return 0;
}
kakaying 2008-06-01
  • 打赏
  • 举报
回复
printf("%S",temstr); // "%S"改为"%s"
printf在实现上考虑到了Unicode的情况,字符串格式S会将字符串以Unicode格式解析输出,而s则是ASCII。
顺便提一下,wprintf与之相反。
另外,temstr末尾添加'\0'结束符,否则很可能出乱码,都是在字符串之后。

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧