c - 调用 strtok 的段错误?

标签 c

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

Tree tree = create_node(NULL);
add(tree, "jacob");
add(tree, "jacob, blue");

(部分)添加方法:

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);

实际结果:

Add: jacob
pn, jacob cn: (null)
//Empty tree!
//jacob is the root
Add: jacob, blue
Segmentation fault (core dumped)

它在第一次调用 strtok() 时出现段错误。我真的很困惑为什么。对不起,如果这真的很基本。

最佳答案

像这样:

#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;
}

关于c - 调用 strtok 的段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55409488/

相关文章:

C:指针=变量和指针=变量有什么区别?

将字符串中的一个字母复制到另一个字符串中

C语言计数器

c - 限制运行的线程

c++ - 为什么我在带有 OpenGL 核心配置文件的窗口上看不到红色三角形?

c - 协议(protocol)消息反序列化不当

C 读写字符串 Visual Studio 2013

c - 轮询锁是实现关键部分的正确方法吗?

c - 如何将已解析的字符串放入 malloc/calloc/动态内存中?

c - C 中的异常处理 - 从 Java JNI 捕获 native C 崩溃