首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自于调用strtok的strtok?

来自于调用strtok的strtok?
EN

Stack Overflow用户
提问于 2019-03-29 09:59:51
回答 1查看 69关注 0票数 1

我在我的函数中调用strtok,以便从逗号分隔的char *中获取两个char *。当我这样做的时候,它是分段错误的,我不是很确定为什么。

代码语言:javascript
复制
Tree tree = create_node(NULL);
add(tree, "jacob");
add(tree, "jacob, blue");

add方法的一部分:

代码语言:javascript
复制
void add(Tree tree, char * input){
    printf("Add: %s\n", input);
    char * parent_name;
    char * child_name;
    if(strstr(input, ",") != NULL){
            const char delimiter[2] = ",";
            parent_name = strtok(input, delimiter);
            child_name = strtok(NULL, delimiter);
    }else{
            parent_name = input;
    }

    printf("pn, %s cn: %s\n", parent_name, child_name);

实际结果:

代码语言:javascript
复制
Add: jacob
pn, jacob cn: (null)
//Empty tree!
//jacob is the root
Add: jacob, blue
Segmentation fault (core dumped)

它在第一次调用strtok()时分段。我真的被难住了,为什么。如果这真的很基础的话,很抱歉。

EN

回答 1

Stack Overflow用户

发布于 2019-03-29 10:22:34

如下所示:

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct Tree {
} Tree;

void add(Tree *tree, const char *str)
{
    char *input = strdup(str);
    char *parent_name = NULL;
    char *child_name = NULL;

    printf("Add: %s\n", input);
    if(strstr(input, ",") != NULL) {
        const char delimiter[2] = ",";
        parent_name = strtok(input, delimiter);
        child_name = strtok(NULL, delimiter);
    } else {
        parent_name = input;
    }

    printf("pn, %s cn: %s\n", parent_name, child_name);
    free(input);
}

Tree *create_node()
{
    return NULL;
}

int main()
{
    Tree *tree = create_node(NULL);
    add(tree, "jacob");
    add(tree, "jacob, blue");
    return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55409488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档