| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6983 人关注过本帖
标题:文件写入,数字部分显示的是乱码?? 求指教 谢谢
只看楼主 加入收藏
caoyuyong
Rank: 2
等 级:论坛游民
帖 子:20
专家分:10
注 册:2012-8-16
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:17 
文件写入,数字部分显示的是乱码?? 求指教 谢谢
今天写了一段代码,,往一个指定的dat文件写数据,写完了,用记事本打开,只能看见字母,数字什么的都是乱码了,,为什么啊
 
也就是创建了一个动态链表,每个结点用来存储某学生的信息,包括姓名,年龄,编号什么的,,,,
通过     定义p是struct student * ;....... fp指向某个dat文件   fwrite(p,sizeof(struct student),1,fp); .......  p=p->next;   

想了半天,实在没弄懂    请指点下 ,谢谢

搜索更多相关主题的帖子: dat文件 动态 
2012-08-21 17:15
轮椅之星
Rank: 2
等 级:论坛游民
帖 子:18
专家分:42
注 册:2012-8-16
收藏
得分:0 
你试着往。txt文件里写同样的内容,看看有没有乱码。如果没有的话,那就是说.dat文件里面存的是二进制数据,就是一堆乱码,你是看不懂的,这是给电脑看的。
如果.txt文件也有乱码,那就说明你的代码有问题。
2012-08-21 18:17
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
请楼主思考1与'1'有什么区别?

总有那身价贱的人给作业贴回复完整的代码
2012-08-21 18:29
dsl975708035
Rank: 3Rank: 3
来 自:平凉
等 级:论坛游侠
帖 子:101
专家分:152
注 册:2012-8-3
收藏
得分:0 
同意三楼

唉,初三要停停了,舍不得啊。。
2012-08-21 19:08
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
好高科技  能操作文件了,为什么我还在学数据结构呢


我要成为嘿嘿的黑客,替天行道
2012-08-21 21:51
caoyuyong
Rank: 2
等 级:论坛游民
帖 子:20
专家分:10
注 册:2012-8-16
收藏
得分:0 
难道说   fwrite函数是将所有数据当做 字符来输入到指定文件么?

连续一个星期猛看C,现在头疼的狠,,,哎,,准备看数据结构了....以前学的,几年没摸,都忘记了....
头疼.....的狠啊..
2012-08-22 20:05
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
以下是引用caoyuyong在2012-8-22 20:05:07的发言:

难道说   fwrite函数是将所有数据当做 字符来输入到指定文件么?

连续一个星期猛看C,现在头疼的狠,,,哎,,准备看数据结构了....以前学的,几年没摸,都忘记了....
头疼.....的狠啊..

fwrite 是非格式化输出函数。可以理解成一个字节一个字节地往文件里写。

至于楼主的问题,看三楼就行了。
2012-08-22 22:34
thlgood
Rank: 5Rank: 5
等 级:职业侠客
帖 子:281
专家分:381
注 册:2010-9-24
收藏
得分:10 
fwrite(p,sizeof(struct student),1,fp);
你这样写的话,要把1转成'1'才行,

你这样写还有一个问题。

你没有写出struct student这个结构体是怎么定义的,我假设你的struct student是这样定义的:
struct student{
    char name[20];
    int   age ;
};
那么,每次执行fwrite(p,sizeof(struct student),1,fp); 的时候都会写入24个字符,不管name有多长,都会写入24个字符进去,这样是很不合理的。

合适的做法是这样的:
方法一:用fprintf替代fwrite。

方法二:在用fwrite写入文件之前,用malloc分配一块内存:
void* buff = malloc(sizeof(...))
然后将将*p指向的结构里面的内容转成一个字符串,存入buff中,然后用fwrite写入。
当然第二种方法比较麻烦。

方法三:用freopen()
这个函数怎么用,我就不解释了。自己去搜索!

最后说句题外话,Windows下操作文件的适合要注意‘二进制’模式,通常在给txt文件写数据的时候不用二进制形式,往bmp、mp3等非二进制文件里面写数据的适合一定要用二进制模式。
在Linux/UNIX平台下,'二进制'模式和常规的模式是一样的。


ps:
    我刚来这个论坛的时候,版主还是御坂美琴,好久没来,发现换了好多版主了。。。时间过得真快啊。

[ 本帖最后由 thlgood 于 2012-8-23 02:02 编辑 ]

o(∩∩)Linux & Python 群:187367181
2012-08-23 02:01
caoyuyong
Rank: 2
等 级:论坛游民
帖 子:20
专家分:10
注 册:2012-8-16
收藏
得分:0 
谢谢了
2012-08-23 17:32
chuanglan
Rank: 2
等 级:论坛游民
威 望:2
帖 子:91
专家分:29
注 册:2012-8-14
收藏
得分:0 
回复 3楼 embed_xuel
楼主的1怎么错了?
2012-08-23 18:45
快速回复:文件写入,数字部分显示的是乱码?? 求指教 谢谢
数据加载中...
 
   



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

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