结构体解决方案

结构体
#include "stdio.h"
main()
{
struct student
{
int num;
char name[6];
char sex[6];
char addr[15];
}a={2111404114,"helen","female","jiangxiganzhou"};
printf(" No:%d\n name:%s\n sex:%s\n addr:%s\n",a.num,a.name,a.sex,a.addr);
return 0;
}
这个是怎么回事?
------解决思路----------------------
引用:
#include "stdio.h"
int main()
{
struct student
{
int num;
char name[6];
char sex[7];   //这里要分配7个字符,因为字符串末尾’\0'也会占用一个字节
char addr[15];
} a = { 2111404114, "helen", "female", "jiangxiganzhou" };
printf(" No:%d\n name:%s\n sex:%s\n addr:%s\n", a.num, a.name, a.sex, a.addr);
return 0;
}


学习了,不好意思。
------解决思路----------------------
把它整体移到main函数外,是不是就秒懂了?!放在函数外是全局的类型定义(常见方式),放在函数内是局部的类型定义(不常用方式,定义一个局部结构类型,出来函数就不可用了,这样的需求非常少),后面紧接着定义了一个变量a并用{ }方式初始化结构体成员

struct student
{
int num;
char name[6];
char sex[6];//为什么赋值低于6运行结果是连接下一个字符串一起输出呢?
char addr[15];
}a={2111404114,"helen","female","jiangxiganzhou"};

main()
{
printf(" No:%d\n name:%s\n sex:%s\n addr:%s\n",a.num,a.name,a.sex,a.addr);
return 0;
}

------解决思路----------------------
引用:
#include "stdio.h"
main()
{
struct student
{
int num;
char name[6];
char sex[6];//为什么赋值低于6运行结果是连接下一个字符串一起输出呢?
char addr[15];
}a={2111404114,"helen","female","jiangxiganzhou"};
printf(" No:%d\n name:%s\n sex:%s\n addr:%s\n",a.num,a.name,a.sex,a.addr);
return 0;
}
这个要看编译环境,我使用vs2013,编译是无法通过的,因为“female”字符串的长度已经超过了6,无法初始化。严格的说,这种编译错误提示是有益的。