文件传输-C语言中memset()如何用?下面的程序运行时为什么在文件中显示的age信息都是乱码?

问题描述

C语言中memset()如何用?下面的程序运行时为什么在文件中显示的age信息都是乱码?
C语言中memset()如何用?下面的程序运行时为什么在文件中显示的age信息都是乱码? 如何改正?
#include
#include
#define N 3
void main()
{
typedef struct student
{
char id[6];
char name[8];
int age;
}STU;
FILE *fp;
STU stu1[N]stu2[N];
if((fp=fopen(""d:student.txt""wb""))==NULL)
{
printf(""cannot open this filen"");
exit(0);
}
for(int i=0;i<N;i++)
{ memset(&stu1[i] 0 sizeof( struct student));
printf(""请输入第%d个学生的信息n""i+1);
scanf(""%s %s %d""stu1[i].idstu1[i].name &stu1[i].age );
fwrite(stu1+isizeof(STU)1fp);
}
fclose(fp);
if((fp=fopen(""d:student.txt""rb""))==NULL)
{
printf(""cannot open this filen"");
exit(0);
}
for(int j=0;j<N;j++)
{
memset(&stu2[j] 0 sizeof( struct student));
printf(""n"");
fread(stu2+jsizeof(STU)1fp);
printf(""第%d个学生的信息n""j+1);
printf(""%st %st %dn""stu2[j].idstu2[j].namestu2[j].age);

}
fclose(fp);
}
运行:

文件中显示结果:

年龄对应的为什么是乱码?

解决方案

因为你存的是整数,在计算机中它以原始值而不是ascii表示。如果要可读,需要定义成char类型,用itoa转换。

解决方案二:
比如1的ascii码是49
你在文件中存49,读出来的是""1""
如果你存的是1,那么读出来的其实是4个不可见的字符

解决方案三:
这种问题中学计算机课都应该学过的。

解决方案四:
ID可以定义成 char,为什么年龄不也一样定义成 char?这样,处理就统一了。

时间: 2024-08-29 14:43:45

文件传输-C语言中memset()如何用?下面的程序运行时为什么在文件中显示的age信息都是乱码?的相关文章

c语言-C语言中,如何用*画出一些图案!感觉没有思路!表达式和图案的联系

问题描述 C语言中,如何用*画出一些图案!感觉没有思路!表达式和图案的联系 C语言中,如何用*画出一些图案!感觉没有思路!表达式和图案的联系 解决方案 你可以试试看现在纸上设计下草图,照着位置放不就可以了?如果想用复杂点的表达式之类的,也可以看一看图形学的一些图形算法,把每一个星号的位置当做像素点putpixel来处理 解决方案二: 细心观察,找规律啊. 关键还得有设计思路. 解决方案三: 不知道要什么样的图案,一般提问的都是三角形梯形菱形四边形这些相对较简单也易实现代码编写.http://bl

文件传输-下面c语言中要将操作结果存入文件(当遇到#时为止)。程序运行时为什么老是中断出错?

问题描述 下面c语言中要将操作结果存入文件(当遇到#时为止).程序运行时为什么老是中断出错? #include(stdio.h)#include(stdlib.h)void main(){FILE *fp;char ch;if((fp=fopen(""C:UsersAdministratorDesktopEnglish.doc""w""))=NULL){ printf(""cannot open filen"&quo

控制-自己编的程序运行时串口被程序自己占用,如何用代码强制关闭重新连接?

问题描述 自己编的程序运行时串口被程序自己占用,如何用代码强制关闭重新连接? 我用vs2010基于MFC编一个小程序,其中有一部分是用单片机转USB串口与电脑程序相连.现在问题是: 不小心动了Usb线的话,程序会卡住,在想打开串口会显示串口被占用(就是自己的程序占用).需要把USB线拔下来才能解决问题.求大侠指导,能不能用代码控制,按个软件上的button,就能自动连接上com1. 求大侠指导! 解决方案 结束进程再重启看看行不行.首先要确定卡死不是驱动的问题,如果是驱动的问题,程序就无能为力了

qt程序发布时在.pro文件中没有添加使用的库在发布时却要加上?

问题描述 qt程序发布时在.pro文件中没有添加使用的库在发布时却要加上? 解决方案 http://blog.sina.com.cn/s/blog_79ab4be10101p1dk.html

visual studio 2010-打不开VS2010中qt设计的.ui文件,但是程序运行时界面正常。是什么原因呢?

问题描述 打不开VS2010中qt设计的.ui文件,但是程序运行时界面正常.是什么原因呢? 解决方案 重启启动下,再编译看看,你有没有人为修改过里面的东西,再不行重新删除了创建一次.设计器对代码的格式等都有限制,你的代码是合法的,人工写的可能还是造成设计器不识别. 解决方案二: 在VS上开发过Qt程序,在VS上安装Qt插件,就可以打开了 解决方案三: 是不是因为 QT 的版本,或者 VS的版本不匹配.

深入学习C语言中memset()函数的用法_C 语言

头文件: #include <string.h> memset() 函数用来将指定内存的前n个字节设置为特定的值,其原型为:    void * memset( void * ptr, int value, size_t num ); 参数说明: ptr 为要操作的内存的指针. value 为要设置的值.你既可以向 value 传递 int 类型的值,也可以传递 char 类型的值,int 和 char 可以根据 ASCII 码相互转换. num 为 ptr 的前 num 个字节,size_t

java实现创建临时文件然后在程序退出时自动删除文件_java

通过java的File类创建临时文件,然后在程序退出时自动删除临时文件.下面将通过创建一个JFrame界面,点击创建按钮在当前目录下面创建temp文件夹且创建一个以mytempfile******.tmp格式的文本文件.代码如下: 复制代码 代码如下: import java.io.*; import java.util.*; import javax.swing.*; import java.awt.event.*; /**  * 功能: 创建临时文件(在指定的路径下)  */ public

详解Android数据存储之Android 6.0运行时权限下文件存储的思考_Android

前言: 在我们做App开发的过程中基本上都会用到文件存储,所以文件存储对于我们来说是相当熟悉了,不过自从Android 6.0发布之后,基于运行时权限机制访问外置sdcard是需要动态申请权限,所以以往直接sdcard根目录上直接新建了一个xxx/cache/目录来做文件存储就会不是那么容易控制了,所以有必要重新认识一下Android文件存储的相关知识了. 背景: 有关外置sdcard的读写权限 <uses-permission android:name="android.permissi

详解Android数据存储之Android 6.0运行时权限下文件存储的思考

前言: 在我们做App开发的过程中基本上都会用到文件存储,所以文件存储对于我们来说是相当熟悉了,不过自从Android 6.0发布之后,基于运行时权限机制访问外置sdcard是需要动态申请权限,所以以往直接sdcard根目录上直接新建了一个xxx/cache/目录来做文件存储就会不是那么容易控制了,所以有必要重新认识一下Android文件存储的相关知识了. 背景: 有关外置sdcard的读写权限 <uses-permission android:name="android.permissi