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

标签 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,预期为“;”在结束声明列表中,类型名称需要说明符或限定符)

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/

相关文章:

objective-c - 我如何在 Objective-C 中传递(按值)结构?

C++ 容器 : Optimal Memory Management

c - 返回动态分配的副本 const char *s,而不使用标准库中除 malloc() 和 free() 之外的任何其他函数

c - 从C中的字符串中删除空格

c++ - ISO C++禁止在结构内初始化成员

c - puts() 如何在没有\0 终止符的情况下找到数组的末尾?

C - 为链表节点分配动态内存时出错

c - make 命令的 fatal error

c - 为什么函数要用括号括起来?

c - 如何从 C 编程中的函数返回结构变量?