C语言 结构指针分段错误


#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 optionsn");
        printf("1-Introduce new studentn");
        printf("2-Introduce new markn");
        printf("3-Print report of all studentsn");
        printf("4-Exitn");
        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 studentn");
            scanf("%s",(*St[entrynumber]).name);
            printf("nEnter student Numbern"); 
            scanf("%d",&(*St[entrynumber]).St_No);
            entrynumber++;                        
            int noofstudents = entrynumber;       
            break;   
                                           |

我把剩下的剪掉了

好的,所以我在这里的这一行中遇到了 seg 错误

scanf("%s",(*St[entrynumber]).name);

当我把它放进去时,scanf工作,它只是给出了一个 SEG 错误

谁能帮我请?

St[50] = &Stu[50];

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

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

顺便说一句,(*St[entrynumber]).name)通常写成St[entrynumber]->name.

实际上根本不需要指针数组。您可以在scanf()通话中只使用Stu[entrynumber].name&Stu[entrynumber].St_No

不要忘记,scanf()中的%s只读了一个字。如果您尝试输入名字和姓氏,它将不起作用。您可能应该阅读带有fgets()的整行(并且不要忘记删除末尾的换行符(。

最新更新