【问题标题】:C dynamic struct errorC动态结构错误
【发布时间】:2016-08-03 18:06:25
【问题描述】:
#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); 

为什么会这样? 谢谢

【问题讨论】:

  • char name[]; 需要大小。

标签: c arrays pointers dynamic struct


【解决方案1】:

. 运算符的优先级高于一元 *(请参阅 here)。所以首先(在取消引用之前)编译器试图在(array+i) 中找到一个age 字段,它不是一个结构,而是一个指针。
您想将*(array+i).age 替换为(array+i)-&gt;age 或(*(array+i)).age。

【讨论】:

  • 谢谢,解决了错误!现在我在执行行后出现段错误 scanf("%d %f %s",&tempptr->age,&tempptr->gpa,&tempptr->name);你知道问题可能是什么吗?抱歉,C 新手
  • 这是一个不同的问题。
  • 我知道,不过我想我可能会问,因为它似乎很小
  • 好吧,你没有为name分配任何空间。
  • *name* 字段在您的代码中是一个大小为零的数组。它也需要空间。要么给它一个像name[20]这样的大小,要么为结构分配更多空间,因为它被称为“灵活数组成员*(你可以谷歌它)
猜你喜欢
  • 2015-06-09
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 2020-12-30
  • 1970-01-01
  • 2016-04-02
相关资源
最近更新 更多