【发布时间】:2016-01-22 21:18:16
【问题描述】:
我有一个需要解析的 malloced 字符串。我使用strtok() 完成了所有解析。 Strtok 已返回一个指向我的指针,如果我 printf 使用该指针,则已解析字符串的正确部分将被打印。之后,我将释放 strtok 返回的指针也指向的 malloced 字符串。
如何将指针指向的内容存储到结构中,这样即使在主字符串被释放后,值仍保留在结构变量中。
字符串:Tommy-1234567
我的strtok返回指针:
char *studentName= strtok(String1,"-");
char *studentNo= strtok(NULL,"-");
我的结构:
typedef struct Student{
char *name; //Want name to be stored here even after string is freed
int *studentNumber; //Want no. to be stored here even after string is freed
}Student;
【问题讨论】:
-
strdup(studentName)怎么样? -
使用
strdup。free不是strtok返回的(字符串)指针:它指向 您传递给它的字符串 的碎片部分。您唯一释放的是原始字符串指针(如果是malloced)或片段指针(如果它们是strduped)。 -
@WeatherVane 对不起,如果我解释得不好,但是是的,我指的是释放分配的字符串。
-
对不起,如果我解释得不好。
strdup将分配更多内存,并复制解析字符串的片段。然后您可以free原始字符串。稍后,当您完成student结构时,您可以释放存储在student.name中的指针。 -
拥有
student.studentNumber的指针是没有用的。由于数据是int,这比存储数字更复杂。