c-如何对不同的字符指针进行malloc



我有一个类似的结构

struct Patient {
char* name;
char* address;
char* socialSecurityNumber;
char* typeOfExamination;
bool isExpress;
}

我必须从这样的txt文件中填充这个结构的动态数组:(定界符:"(

Andrew;Address street first;123;pulmonary;1
Matthew;Address street second;456;COVID;0
Lisa;Address street third;789;rectum;0

打开文件并读取文件后:

while (fgets(line, 255, (FILE*) fPtr)) {
char *p = strtok (line, ";");
patients[i].name=(char*)malloc(sizeof(char*));
strcpy(patients[i].name, p);
p = strtok (NULL, ";");
patients[i].address=(char*)malloc(sizeof(char*));
strcpy(patients[i].address, p);

...
i++;
}

在第二个malloc/strcpy之后,我得到一个sysmalloc:Assertion失败错误

我做错了什么?

patients[i].name=(char*)malloc(sizeof(char*));为单个字符指针分配了足够的空间,大约4到8个字节。您需要为每个字符分配足够的空间,再加上末尾的一个空字节。

patients[i].name = (char*)malloc(sizeof(char) * (strlen(p)+1));

这是可行的,但我们可以把它缩小。不需要铸造malloc。通常我们也将长度乘以类型sizeof,但sizeof(char)总是1,因此可以省略它。

patients[i].name = malloc(strlen(p)+1);

您可以使用strdup来做同样的事情,但这是一个POSIX函数,并不总是可用的。写自己的东西通常是值得的。

patients[i].name = strdup(p);

相关内容

  • 没有找到相关文章

最新更新