2016-08-03 56 views
0
#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); 

为什么会出现这种情况? 谢谢

+0

'char name [];'需要大小。 – BLUEPIXY

回答

1

.运算符比一元运算符*(请参阅here)更高的优先级。因此,首先(解除引用前)编译器试图在(array+i)中找到age字段,该字段不是结构,而是指针。
您想要用(array+i)->age(*(array+i)).age替换*(array+i).age

+0

谢谢,解决了错误!在执行scanf(“%d%f%s”,&tempptr-> age,&tempptr-> gpa,&tempptr-> name)之后,现在即时获取segfault。你知道这个问题可能是什么吗?对不起,新增至C – throwawayguy

+0

这是一个不同的问题。 –

+0

我知道,我想我可能会问,因为它似乎很小 – throwawayguy