Сегфо от вызова стрток? - PullRequest
       2

Сегфо от вызова стрток?

1 голос
/ 29 марта 2019

Я вызываю strtok в своей функции, чтобы получить два символа * из символа *, разделенного запятой. Когда я это делаю, это сегфолтинг, и я не совсем уверен, почему.

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

(часть) метод add:

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 (). Я действительно озадачен, почему. Извините, если это действительно просто.

1 Ответ

0 голосов
/ 29 марта 2019

Как это:

#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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...