往文件里写空格是有乱码

Brainin 2011-05-28 12:02:16
[code=C/C++][#include<stdio.h>
int main()
{
FIEL *fp;
char *kong=" ";
char ch[2]={'a','b'};
fp=fopen("test.txt","w");
fputs(ch,fp);
fputs(kong,fp);
return 0;
}]

当kong数组为偶数个空格时写入没有乱码出现。当为奇数个空格时有乱码。这是为什么呢?
VC++ 6.0平台。
...全文
369 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
xspace_time 2011-05-31
  • 打赏
  • 举报
回复
在文件件没有关闭之前,字符存在于文件缓冲区,昨天直接移动fp指针增加了'\0'
今天搞不出来了,郁闷,大体上是

fp=fopen("test111.txt","w");
fputs(ch,fp);
fputs(kong,fp);
fp--;
fputc(0x00,fp);
fclose(fp);

或者
fp=fopen("test111.txt","w");
fputs(ch,fp);
fputs(kong,fp);
while(*fp!='\n')fp--;
while(*fp==ch[0]||*fp==ch[1]||fp==kong)fp++
fputc('\0',fp);
fclose(fp);
Brainin 2011-05-31
  • 打赏
  • 举报
回复
谢谢大家了。分少。结贴。
如此美丽的你 2011-05-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 cqltwslt 的回复:]
结束符'\0'的问题,注意ch[2]={'a','b'}与ch=“ab”
前者是字符数组,在ch[n>2]={'a','b'}会在后面加'0';
后者是字符串都会在后面加'0';
由于你定义了ch[2]={'a','b'}就出现ls的情况!!
[/Quote]
++
Brainin 2011-05-30
  • 打赏
  • 举报
回复
谢谢大家。那为什么偶数个空格就没有乱码了呢?
Brainin 2011-05-28
  • 打赏
  • 举报
回复
[code=C/C++][/#iclude]
Brainin 2011-05-28
  • 打赏
  • 举报
回复
那用什么?还有那为什么偶数个空格就没有问题呢?
「已注销」 2011-05-28
  • 打赏
  • 举报
回复
字符串ch不是以'\0'结束。。。所以用fputs的结果是无法预知的。。。
cqltwslt 2011-05-28
  • 打赏
  • 举报
回复
结束符'\0'的问题,注意ch[2]={'a','b'}与ch=“ab”
前者是字符数组,在ch[n>2]={'a','b'}会在后面加'0';
后者是字符串都会在后面加'0';
由于你定义了ch[2]={'a','b'}就出现ls的情况!!
就想叫yoko 2011-05-28
  • 打赏
  • 举报
回复
char ch[3] = {'a', 'b', '\0'};
char ch[3] = "ab";
  • 打赏
  • 举报
回复
字符数组或字符串,在输出的时候,都会找'\0',找到了则输出结束,否则一直往下一处内存找,一直到找到
这就出现了乱码的情况

所以你得在字符数组后面最后一位设为'\0'
無_1024 2011-05-28
  • 打赏
  • 举报
回复
结束符
Brainin 2011-05-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 shaoxiaojing5193 的回复:]
啊,我发现问题了。。。ch[]="a b"; 这样才是以'\0'结尾,这样就行了。。。至于你说的如果空格数是偶数时就没有乱码,是奇数就有乱码这点我不清楚,因为在我的机子测试无论是奇数还是偶数,按照你的程序都会有乱码出现。因为,你用fputs函数写入文本,直接打开文本看到的就会是乱码,你用fgets读取出来然后显示到屏幕就不是乱码了,你看下我的代码:
#include<stdio.h>
#inc……
[/Quote]

恩、这样确实没有乱码了。我想着也是数组的问题,可没有想明白是怎么回事。
laoyang103 2011-05-28
  • 打赏
  • 举报
回复
用fprintf就好啦 就像你用printf一样 显示器上是什么样的数据

文件里面就是什么样的数据 很好用 还有fscanf
shaoxiaojing5193 2011-05-28
  • 打赏
  • 举报
回复
啊,我发现问题了。。。ch[]="a b"; 这样才是以'\0'结尾,这样就行了。。。至于你说的如果空格数是偶数时就没有乱码,是奇数就有乱码这点我不清楚,因为在我的机子测试无论是奇数还是偶数,按照你的程序都会有乱码出现。因为,你用fputs函数写入文本,直接打开文本看到的就会是乱码,你用fgets读取出来然后显示到屏幕就不是乱码了,你看下我的代码:
#include<stdio.h>
#include<stdlib.h>
void main()
{
FILE *fp;
char *kong=" ";
char ch[]="a b";
char a[20];
fp=fopen("test111.txt","w");
fputs(ch,fp);
fputs(kong,fp);
fclose(fp);
fp=fopen("test111.txt","r");
fgets(a,20,fp);
printf("%s",a);
}
shaoxiaojing5193 2011-05-28
  • 打赏
  • 举报
回复
啊 ,我也想知道为什么。。。可是在我的机子上测试无论空格数是奇数还是偶数好像都会出现乱码,郁闷 等待正解。。。。
wizard_tiger 2011-05-28
  • 打赏
  • 举报
回复
ch[2]={'a','b'};
ch="ab";//这个相当于ch[3]={'a','b','\0'};
downmooner 2011-05-28
  • 打赏
  • 举报
回复
fputs(ch,fp); ch不是字符串。
AnYidan 2011-05-28
  • 打赏
  • 举报
回复
c 中本无 字符串,只是以'\0'结尾的字符数组

70,020

社区成员

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

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