簡體   English   中英

C動態結構錯誤

[英]C dynamic struct error

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int size,choice;
    printf("student size:\n");
    scanf("%d", &size);

    typedef struct 
    {
        int age;
        double gpa;
        char name[];
    }STUDENT;
    STUDENT *array = (STUDENT *) malloc(sizeof(STUDENT) * size);
    printf("\n(1) Add a student\n(2) Delete a student\n(3) Save all students\n(4)Quit\n");
    scanf("%d",&choice);
    while (choice != 4){
        switch (choice) {
            STUDENT temp;
            STUDENT *tempptr = &temp;
            int cellNum;
            case 1:
                printf("Enter age gpa and name:\n");
                scanf("%d %f %s",&tempptr->age,&tempptr->gpa,&tempptr->name);
                printf("Enter cell number:\n");
                scanf("%d", &cellNum);
                if (cellNum > (size-1)){
                    printf("Invalid cell number\n");
                    break;
                }else{
                    *(array + cellNum) = temp;
                }
            case 3:
               printf("stupid c syntax rules");
               FILE *p = fopen("students.txt","w");
               int i = 0;
               for (i=0; i<size; i++){
                   fprintf(p, "%d, %f, %s\n",*(array+i).age,*(array+i).gpa,*(array+i).name);
               }
        }
        printf("\n(1) Add a student\n(2) Delete a student\n(3) Save all students\n(4)Quit\n");
        scanf("%d",&choice);
    }

    return 0;
}

出現錯誤:

main.c:40:56: error: request for member 'age' in something not a structure or union                                      
                    fprintf(p, "%d, %f, %s\n",*(array+i).age,*(array+i).gpa,*(array+i).name);                            
                                                        ^                                                                
main.c:40:71: error: request for member 'gpa' in something not a structure or union                                      
                    fprintf(p, "%d, %f, %s\n",*(array+i).age,*(array+i).gpa,*(array+i).name);                            
                                                                       ^                                                 
main.c:40:86: error: request for member 'name' in something not a structure or union                                     
                    fprintf(p, "%d, %f, %s\n",*(array+i).age,*(array+i).gpa,*(array+i).name); 

為什么會這樣呢? 謝謝

. 運算符的優先級高於一元* (請參閱此處 )。 因此,首先(在取消引用之前),編譯器將嘗試在(array+i)查找age字段,該age字段不是結構而是指針。
您想用(array+i)->age(*(array+i)).age替換*(array+i).age

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM