我在函数中调用 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/