动态内存分配列表C中的字符串

时间:2017-03-04 10:58:55

标签: c struct dynamic-memory-allocation

我想从文件中创建一个列表。这是我的代码。

#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,期望';'在结束声明列表,类型名称需要说明符或qualifer )

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。

1 个答案:

答案 0 :(得分:3)

您无法在struct声明中分配内存。您应该在主代码中执行此操作:

struct node {
   char *str;
};

struct node node1;
node1.str = malloc(STRLENGTH+1);

此外,sizeof(char *)sizeof(char)不同。事实上,您可以依赖sizeof(char)始终为1,并将其完全保留。