在'('令牌之前解析错误

时间:2014-04-11 15:38:44

标签: c compiler-errors

所以我写下这个程序来读取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进行编译时,我收到错误:“在''''之前解析错误。这个错误出现在4行中,我在上面的代码中将它们标记出来。这里有什么问题?

3 个答案:

答案 0 :(得分:3)

->运算符表示访问指向结构的指针的成员。 E.g。

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';

答案 1 :(得分:2)

*FName->(name1+i)

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

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

或者正如哈利指出的不同答案一样,理智得越多:

FName->name1[i] = ...

答案 2 :(得分:0)

这个怎么样:

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