| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2515 人关注过本帖
标题:用scanf()从键盘输入字符串用fwrite()写入文件出现的乱码问题
只看楼主 加入收藏
liuxiangtao
Rank: 2
等 级:论坛游民
帖 子:11
专家分:57
注 册:2013-3-18
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
用scanf()从键盘输入字符串用fwrite()写入文件出现的乱码问题

#include<stdio.h>
void main()
{
    FILE *fp;
    char ch[10];
    fflush(stdin);
    scanf("%s",ch);
    fp=fopen("F:\\abc.txt","wb");
    fwrite(ch,sizeof(ch),1,fp);
    fclose(fp);

}

运行程序从键盘上输入abc,为什么文件中保存的是abc 烫烫烫? 不是scanf()会在字符串后加个'\0',那应该保存的是abc 才是啊,求解
搜索更多相关主题的帖子: abc 运行程序 字符串 
2013-05-23 11:14
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:10 
fwrite(ch, sizeof(char), strlen(ch) + 1, fp);


[fly]存在即是合理[/fly]
2013-05-23 11:24
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
回复 2楼 azzbcc
路子错了你还帮他实现~

授人以渔,不授人以鱼。
2013-05-23 11:29
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
我觉得他应该会自己想想吧

我是性善论的忠实拥护者哦


[fly]存在即是合理[/fly]
2013-05-23 11:58
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你也可以想一想,实现这个有什麽问题。

授人以渔,不授人以鱼。
2013-05-23 12:01
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
额,老大,不懂你意思额


[fly]存在即是合理[/fly]
2013-05-23 12:05
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
用fwrite()写出去,怎么读回来?这样写出去之后,字符串的长度保存在哪里?明白fread()/fwrite()这一对函数是用在什麽场合的就知道了。

本来就是字符串,用scanf()读入,最简单地用fprintf()输出即可,费劲地要用不配套的fwrite(),自己不觉得别扭的吗?

授人以渔,不授人以鱼。
2013-05-23 12:09
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
其实,他定义了字符数组是10个字节,直接把这10个字节内存用fwrite()复制到文件中,也是没问题的,到时用fread()简单地读回这10个字节到内存,那个'\0'仍然在原来位置,这样得到的字符串跟原来一样,不过霸占了文件的尺寸罢了。而如果你要把本来固定的尺寸变换成可伸缩的数据,就无法用简单的办法取回来,代价是要写更多的代码——用逐个字符读入的办法找到'\0',如果你写入时没有new_line符,fscanf()就不会有效,除非你用固定宽度的字符串读入,那仍然要记忆当时写下的长度才行。

授人以渔,不授人以鱼。
2013-05-23 12:19
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
原来是这个意思

有点感悟,谢老大指点


[fly]存在即是合理[/fly]
2013-05-23 12:19
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
学编程不是把个别问题解决了就好,最紧要的是学会顾头顾尾,在更大的范围里考虑应该选用哪个实现办法,为整体服务。习惯于解决个别问题的,一到综合情景,就会千疮百孔,直至无从入手,彻底崩溃。比如他用这种办法实现了,后面遇到更大的困难,必定又要求助,到时你又给他个别解决,殊不知最根本的问题是一开始就设计错了,这样不断地头痛医头脚痛医脚是不行的。

授人以渔,不授人以鱼。
2013-05-23 12:37
快速回复:用scanf()从键盘输入字符串用fwrite()写入文件出现的乱码问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016833 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved