关于在 malloced 字符串上使用 strtok,有什么我应该知道的吗?
在我的代码中(一般而言)
char* line=getline();
Parse(dest,line);
free(line);
哪里getline()
是一个将 char * 返回到某个 malloced 内存的函数。
和 Parse(dest, line)
是一个做在线解析的函数,结果存储在dest
中, (之前已部分填充,来自其他信息)。
Parse()
电话 strtok()
在线次数可变,并进行一些验证。
每个 token (指向 strtok()
返回的内容的指针)都被放入队列中,直到我知道我有多少。
然后将它们复制到 dest 中的 malloc'd char**。
现在free(line)
和一个释放 dest 中 char*[] 的每个部分的函数,它们都出现在 valgrind 上:
"Address 0x5179450 is 8 bytes inside a block of size 38 free'd"
或类似的东西。
我正在考虑重构我的代码,不直接将 token 存储在 char** 上,而是存储它们的副本(通过分配空间 == 到 strlen(token)+1,然后使用 strcpy()
)。
最佳答案
有一个函数 strdup
分配内存,然后将另一个字符串复制到其中。
关于c - 在分配的字符串上使用 strtok()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1581985/