如何为不同的字符指针调用malloc
我有一个这样的结构如何为不同的字符指针调用malloc,c,pointers,char,malloc,C,Pointers,Char,Malloc,我有一个这样的结构 struct Patient { char* name; char* address; char* socialSecurityNumber; char* typeOfExamination; bool isExpress; } 我必须从txt文件中填充此结构的动态数组,如下所示: (分隔符:“;”) 打开文件并读取文件后: while (fgets(line, 255, (FILE*) fPtr)) { char *
struct Patient {
char* name;
char* address;
char* socialSecurityNumber;
char* typeOfExamination;
bool isExpress;
}
我必须从txt文件中填充此结构的动态数组,如下所示:
(分隔符:“;”)
打开文件并读取文件后:
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-failed错误
我做错了什么?患者[I].name=(char*)malloc(sizeof(char*))代码>为单个字符指针分配足够的空间,大约4到8个字节。您需要为每个字符分配足够的空间,并在末尾添加一个空字节
patients[i].name = (char*)malloc(sizeof(char) * (strlen(p)+1));
那会管用的,但我们可以缩小规模。通常,我们还将长度乘以类型的大小,但是大小(char)
始终为1,因此可以忽略它
patients[i].name = malloc(strlen(p)+1);
您可以使用来做同样的事情,但是POSIX函数并不总是可用的。写自己的东西通常是值得的
patients[i].name = strdup(p);
或
parients[i].name=strdup(p)代码>如果系统中支持strdup()
。
patients[i].name = strdup(p);