我想解析一个字符串,我使用strsep
函数:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[] = "Marco:Q:2F7PKC";
char *token1, *token2, *token3;
char *r = malloc(30);
strcpy(r, str);
token1 = strsep(&r, ":");
token2 = strsep(&r, ":");
token3 = strsep(&r, ":");
printf("tok1 = %s\n", token1);
printf("tok2 = %s\n", token2);
printf("tok3 = %s\n", token3);
free(r);
return 0;
}
这个函数完成了它的工作,但是如果我启动 valgrind,分配的字符串 char * r
没有被正确释放 (definitely lost: 30 bytes in 1 blocks)。
我想知道为什么会出现这种情况,以及是否有其他方法可以完成相同的任务,也许不需要调用 strsep。
我使用 valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./a.out
命令来调用 valgrind。