C 不应该';使用strtok\u r时释放字符

C 不应该';使用strtok\u r时释放字符,c,strtok,C,Strtok,我是否应该在每次调用strtok_r()后释放s_ptr(从字符串中提取令牌) 我从未使用过这个函数,所以可能我错了 致以最诚挚的问候。s_ptr不应被释放,因为它不是由malloc或calloc或realloc分配的。他说 saveptr参数是指向char*变量的指针,strtok_r()在内部使用该变量,以便在解析同一字符串的连续调用之间维护上下文 也就是说,strtok\u r不分配内存。所以只需发送一个指向char的指针地址,即,char**,就足够了,返回后不需要任何东西。即使char

我是否应该在每次调用strtok_r()后释放s_ptr(从字符串中提取令牌)

我从未使用过这个函数,所以可能我错了


致以最诚挚的问候。

s_ptr
不应被释放,因为它不是由
malloc
calloc
realloc
分配的。他说

saveptr参数是指向char*变量的指针,strtok_r()在内部使用该变量,以便在解析同一字符串的连续调用之间维护上下文


也就是说,
strtok\u r
不分配内存。所以只需发送一个指向char的指针地址,即,
char**
,就足够了,返回后不需要任何东西。即使
char*
没有初始化也没关系,但是仍然初始化指向
NULL
的指针是避免噩梦的好方法。

我认为这个答案唯一缺少的是,简单地说,
strtok\r
不分配memory@TaylorFlores在答复中补充说:)
static void get_uevent_info(struct media_device_entry *md_ptr, char *dname)
{
    FILE *fd;
    char file[PATH_MAX], *name, *p;
    char s[1024];
    char *s_ptr;

    snprintf(file, PATH_MAX, "%s/%s/uevent", dname, md_ptr->node);
    fd = fopen(file, "r");
    if (!fd)
            return;
    while (fgets(s, sizeof(s), fd)) {
            p = strtok_r(s, "=", &s_ptr);
            if (!p)
                    continue;
            name = p;
            p = strtok_r(NULL, "\n", &s_ptr);
            if (!p)
                    continue;
            if (!strcmp(name, "MAJOR"))
                    md_ptr->major = atol(p);
            else if (!strcmp(name, "MINOR"))
                    md_ptr->minor = atol(p);
    }

    fclose(fd);
}