【问题标题】:Parse error before '(' token'(' 标记之前的解析错误
【发布时间】:2014-04-11 15:38:43
【问题描述】:

所以我写了这个程序来读取 C 中不可变长度的输入。代码是这样的:

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

struct ch{  
   char c;
   struct ch *next;
} *first;

struct Member {
   char *name1,*name2;
   struct Member *Next;
} *FName;

int scan(void);
int main()
{
    first=NULL;
    FName=NULL;
    scan();
    return 0;
}

int scan(void)
{
    int M,i,count;
    struct ch *O;
    O=(struct ch *)malloc(sizeof(struct ch));
    O=first;
    scanf("%d",&M);

    for(i=0;i<M;i++)
    while(scanf("%c",&first->c))
    {
        O=first->next;
        if(first->c==' ')
            if(!count)
            {
                struct Member *oldfirst;
                oldfirst=(struct Member *)malloc(sizeof(struct Member));
            oldfirst=FName;
            FName->name1=(char *)malloc((count+1)*sizeof(char));
            for(i=0;i<count;i++)
            {
                *FName->(name1+i)=first->c;     /*Error*/
                first=first->next;
            }
            *FName->(name1+count)='\0';         /*Error*/
            FName->Next=oldfirst;
            first=NULL;
            count=0;
        }
    if(first->c=='\n')
        if(!count)
        {
            FName->name2=(char *)malloc((count+1)*sizeof(char));
            for(i=0;i<count;i++)
            {
                *FName->(name2+i)=first->c;     /*Error*/
                first=first->next;
            }
            *FName->(name2+count)='\0';         /*Error*/
            first=NULL;
            count=0;
        }

    O=first;
    count++;
}

return 0;
}

这是问题的一部分,我首先需要获取 2*M 字符串,每行有两个字符串,用空格分隔。

在使用 GCC 编译时,我收到错误:“parse error before '(' token”。此错误出现在 4 行中,我已在上面的代码中将它们标记出来。这里有什么问题?

【问题讨论】:

    标签: c compiler-errors


    【解决方案1】:

    -&gt; 运算符表示访问指向结构的指针的成员。例如

    typedef struct {
        int a;
    } foo;
    
    foo myFoo;
    foo *fooPtr = &myFoo;
    myFoo->a = 1;
    

    代替行:

    *FName->(name2+count)='\0';
    

    您可能想要以下之一:

    *(FName->name2 + count) = '\0';
    FName->name2[count] = '\0';
    

    【讨论】:

      【解决方案2】:
      *FName->(name1+i)
      

      这只是非法语法。你可能想要这样的东西:

      *(FName->name1 + i) = ...
      

      或者当哈利指出不同的答案时,越理智:

      FName->name1[i] = ...
      

      【讨论】:

        【解决方案3】:

        这个呢:

        FName->name1[i]=first->c;
        

        【讨论】:

        • 您能否添加一些额外的解释说明为什么这会解决解析问题?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多