c语言 - 错误:'DATA /* 之前的预期表达式:typedef 结构数据数据 */



我不知道我的代码出了什么问题。我读了一些其他人有同样问题的问题,但我没有找到答案。当我尝试编译时,我得到以下错误:

:|函数'main':|

|35|错误:'DATA'之前的表达式

||函数'lecture_data':|

|59|错误:'DATA'之前的表达式

| | = = =构建失败:2错误(s), 0警告(s)(0分钟(s), 0秒(s)) = = = |

我还想知道在这段代码中我应该做什么,如果有其他问题我应该不做什么。

代码

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #define V 20
    /* Structure */
    typedef struct DATA{
        char* NomP;
        char* NomA;
        int iNbr;
        int iPix;
        struct DATA *Next;
    }DATA;
    /* --------- */
    void* MALLOC(size_t nombre);
    int lecture_data(FILE *fs,DATA* Data,DATA* ROOT);
    void print_data(DATA* data,int len);
    int main(void)
    {
        char FileName[V];
        puts("Data file ? : ");
        gets(FileName);
        FILE* fs = fopen(FileName,"r");
        if( fs == NULL )
        {
            perror("Error ");
            exit(EXIT_FAILURE);
        }
        DATA *HEAD = MALLOC(sizeof DATA);
        DATA *D_Store;
        int len = lecture_data(fs,D_Store,HEAD);
        print_data(D_Store,len);
        return 0;
    }
    int lecture_data(FILE *fs,DATA *Data,DATA *ROOT)
    {
        char cNom[V],cArticle[V];
        int iNombre,iPrix;
        int eofs=0;int i=0;
        while(!eofs)
        {
            fscanf(fs,"%s %s %d %d",cNom,cArticle,&iNombre,&iPrix);
            Data->iNbr=iNombre;
            Data->iPix=iPrix;
            Data->NomA = MALLOC(strlen(cArticle)+1);
            Data->NomP = MALLOC(strlen(cNom)+1);
            strcpy(Data->NomA,cArticle);
            strcpy(Data->NomP,cNom);
            if( i==0 )
            {
                Data -> Next = MALLOC(sizeof DATA);
                ROOT = Data ;
            }
            DATA *Ptr = ROOT ;
            while( Ptr -> Next != NULL )
            {
                Ptr = ROOT -> Next;
            }
            Data -> Next = NULL ;
            Ptr -> Next = Data ;
            fprintf(stdout,"Data : N.%d: %s %s %d$n",i,cNom,cArticle,iNombre*iPrix);
            i++;
            eofs = feof(fs) ;
            if(ferror(fs))
            {
                perror("Error ");
                exit(EXIT_FAILURE);
            }
        }
        fclose(fs);
        return i;
    }
    void* MALLOC(size_t nombre)
    {
        void *MEMEORY = malloc(nombre);
        if(NULL == MEMEORY )
        {
            perror("Error ");
            exit(EXIT_FAILURE);
        }
        return MEMEORY;
    }

变化

DATA *HEAD = MALLOC(sizeof DATA);

DATA *HEAD = MALLOC(sizeof (DATA));

sizeof操作符的类型名称操作数必须加括号

使用

DATA *HEAD = MALLOC( sizeof( DATA ) );
不是

DATA *HEAD = MALLOC(sizeof DATA);

sizeof操作符的定义如下

sizeof unary-expression
sizeof ( type-name )

如你所见,类型名应该用圆括号括起来。

来自C标准(6.5.3.4)sizeof和alignof操作符

2 sizeof操作符返回其操作数的大小(以字节为单位)可以是表达式,也可以是类型的括号名。

考虑如果e是一个表达式,那么( e )也是一个表达式。因此,对于表达式,您可以写

sizeof e

sizeof( e )

变量的标识符也构成一个表达式

相关内容

  • 没有找到相关文章

最新更新