结构指针分段故障

时间:2018-02-01 22:30:04

标签: c pointers struct segmentation-fault scanf

#include <stdio.h>
#include <string.h>

struct student

{
    char name[50];
    int St_No;
    float mark[10];
};

int main()
{
    int entrynumber=0;
    int r=0;

    while(r != 1)
    {
        printf("choose one of the following options\n");
        printf("1-Introduce new student\n");
        printf("2-Introduce new mark\n");
        printf("3-Print report of all students\n");
        printf("4-Exit\n");
        char givenname[50];
        int option;
        scanf("%d",&option);
        int n,i,e=0,j=0;
        struct student *St[50], Stu[50];
        St[50] = &Stu[50];

        switch(option)
        {
        case 1:
            entrynumber;
            printf("Enter name of student\n");
            scanf("%s",(*St[entrynumber]).name);
            printf("\nEnter student Number\n"); 
            scanf("%d",&(*St[entrynumber]).St_No);
            entrynumber++;                        
            int noofstudents = entrynumber;       
            break;   

                                           |

我把剩下的休息了

好的,所以我在这一行得到了段错误

scanf("%s",(*St[entrynumber]).name);
当我把它放进去时scanf工作,它只是给出一个seg错误

任何人都可以帮我吗?

1 个答案:

答案 0 :(得分:4)

St[50] = &Stu[50];

不是将St中的所有指针设置为指向Stu的相应元素的方法。你需要一个循环:

for (int i = 0; i < 50; i++) {
    St[i] = &Stu[i];
}

BTW,(*St[entrynumber]).name)通常写为St[entrynumber]->name

根本不需要指针数组。您可以在Stu[entrynumber].name来电中使用&Stu[entrynumber].St_Noscanf()

不要忘记%sscanf()只读一个单词。如果您尝试输入名字和姓氏,它将无法使用。您可能应该使用fgets()读取整行(并且不要忘记在最后删除换行符。)