我有一个返回char**
的tokenizer方法。结果存储在名为char**
的{{1}}中。当我使用lineTokens
打印第一个标记时,我得到了正确的结果,但是当我使用printf()
时,我得到了一个seg错误。相应的代码如下。
strcmp(lineTokens[0],"Some text")
编辑: 我的tokenize代码如下
lineTokens = tokenize(tempString);
printf("token[0] = %s\n", lineTokens[0]);
if(strcmp(lineTokens[0], "INPUTVAR")==0){
printf("It worked\n");
}
}
答案 0 :(得分:3)
当然,如果没有看到tokenize()
的代码,就无法回答这个问题。
我的猜测是该函数中存在一些未定义的行为,这可能会破坏堆栈,因此当printf()
运行并实际使用更多堆栈空间时,事情就会变坏。具有未定义行为的事情是,它确实未定义,任何事情都可能发生。
在Valgrind中运行代码。
答案 1 :(得分:1)
您的tokenize功能已损坏。代码中的每个指针都需要指向已分配的内存,这不是这里的情况。通过简单地声明指针就没有分配内存:指针只包含地址到分配给其他地方的内存。鉴于您将其设置为指向“其他地方”,如果不这样做,它将指向随机垃圾地址。
所以你需要从头开始重写这个功能。将指向已分配内存的指针作为参数传递,或在函数内动态分配内存。但在此之前,我强烈建议您更多地研究数组和指针,例如阅读C FAQ的this chapter。