三国志13无法登庸武将:c语言结构体

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/27 18:58:24
#include"stdio.h"
struct course
{
char name[15];
char sex[3];
long int number;
}str[1]={"j chou","M",89751};
main()
{ struct course *p;
for(p=str;p<=str;p++)
printf("%s %ld %s\n",p->name,p->number,p->sex);
}
为什么我把ca\ char serxf

char sex[3]g改成【1] 运行时输出sex时就会出现乱码
这两个 一样的char sex[1]={'M','\0'}
char sex[1]="M"
多了系统会提示你的! 没有多啊

你的问题有乱码阿 呵呵

大概看懂你的意思了就是把数组长度3改为1就会出现乱码 你不知道为为什么。。

现在告诉你 因为用%s输出的应该为字符串 他实际工作时 是以\0作为标志的
如果a[3]="m"这样地赋值 那么数组里应该是这样的 m \0 \0 这三个元素 %s碰到第一个\0就会停止输出
但是如果是a[1]="m" 那数组里就有一个m %s输出完这个m 就会接着往下输出 下一个地址空间的字符 直到碰到一个\0终止 这就是你会看到m后还有乱码的原因了

如果想用%s输出则应该给他留出一个空间来赋值\0
其实标准的写法应该是
a[3]={'m','\0'};
你在结构体里赋值可以省略但是一定要留出来一个空间给\0

按照你的要求 应该改成 char型变量 并且用''赋值 %c 输出 修改如下:
struct course
{
char name[15];
char sex;
long int number;
}str[1]={"j chou",'M',89751};

void main()
{ struct course *p;
for(p=str;p<=str;p++)
printf("%s %ld %c\n",p->name,p->number,p->sex);
}

而且提醒你 在这个代码中for循环没有意义 可以用p=str;就行

你的问题就有“乱码”,这个问题的话,你把char[3]弄成char[1]后,如果你定义sex的时候多于一个字母就会产生地址错误就会有乱码。

因为C中的字符串长度总是实有字符数加1,因为字符串的末尾总是'\0',当你的字符串只包含一个字符时,便无法存储末尾的'\0',在输出时程序识别出字符串类型,并且要把'\0'以前的内容全部输出,所以要一直找下去直到遇到'\0',因此内容是不可预计的。
这个问题实际不是结构体的问题,而是字符串的问题

因为每地方存储/0啊