所以我写下这个程序来读取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行中,我在上面的代码中将它们标记出来。这里有什么问题?
答案 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;