注册 登录
编程论坛 C语言论坛

sex为什么出不来???!!1

新手714 发布于 2020-05-22 18:20, 2092 次点击
#include<stdio.h>
#include<string.h>
int main()
{
    struct student
    {
        int num;
        char name[7];
        char sex;
        float score;
    }*p,stu;
    p = &stu;
    stu.num = 1;
    stu.sex = 'F';
    stu.score = 97;
    strcpy(stu.name, "Gongyoo");
    printf("No.%d\nSex:%c\nScore:%5.1f\nName:%s\n", stu.num, stu.sex, stu.score, stu.name);
    printf("\nNo.%d\nSex:%c\nScore:%5.1f\nName:%s", (*p).num, (*p).sex, (*p).score, (*p).name);
    return 0;
}
5 回复
#2
rjsp2020-05-22 18:42
strcpy(stu.name, "Gongyoo");
你将8个字符拷贝到name中,但name的容量是7,溢出了
#3
新手7142020-05-22 20:00
回复 2楼 rjsp
为什么sex输不出来?是被占用了?如果是占用了它是怎么找到sex的地址的???
#4
纯蓝之刃2020-05-23 07:44
回复 3楼 新手714
赋给stu.name的值所占用的空间大于分配给stu.name的空间,在结构体里内存是连续的,stu.name后面的空间分配给了sex,所以如果你溢出一位,那么正好stu.name里的'\n'赋给了sex,sex的值是'\n'。sex的地址还是那个地址,只不过地址里的数据被替换了而已。你可以通过打印结构体里变量的起始内存地址查看计算地址是如何分配的。
#5
新手7142020-05-23 15:04
回复 4楼 纯蓝之刃
拜谢大佬!但是  打印结构体里变量的起始内存地址,咋整??
#6
新手7142020-05-25 19:29
回复 4楼 纯蓝之刃
为什么输出时Name和sex换个位置sex就可以输出了
1