我想从一个文件创建一个列表。这是我的代码。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct node {
char str1[200];
char str2[200];
char str3[200];
struct node *next;
}*start=NULL;
int main(){
FILE *fp;
fp = fopen("file", "r");
while(!feof(fp)){
struct node *new_node,*current;
new_node=(struct node*)malloc(sizeof(struct node));
fscanf (fp,"%s %s %s",new_node->str1,new_node->str2,new_node->str3);
new_node->next=NULL;
if(start==NULL) {
start=new_node;
current=new_node;
}
else {
current->next=new_node;
current=new_node;
}
}
fclose(fp);
}
现在我希望 str1、str2、str3 是动态分配的,但是如果我使用这段代码,我会遇到这些错误(重复的成员 str1、str2、str3,预期为“;”在结束声明列表中,类型名称需要说明符或限定符)
struct node {
char *str1;
#ERROR
str1=(char*)malloc(sizeof(char*)*200);
char *str2;
#ERROR
str2=(char*)malloc(sizeof(char*)*200);
char *str3;
#ERROR
str3=(char*)malloc(sizeof(char*)*200);
struct node *next;
}*start=NULL;
我正在研究 Xcode。
最佳答案
您不能在 struct
声明中分配内存。您应该在主代码中执行此操作:
struct node {
char *str;
};
struct node node1;
node1.str = malloc(STRLENGTH+1);
此外,sizeof(char *)
与 sizeof(char)
不同。事实上,您可以依赖 sizeof(char)
始终为 1,并完全忽略它。
关于c - 列表C中字符串的动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42595161/