使用strcmp进行分段错误,但字符串使用printf进行打印

时间:2015-04-23 13:51:31

标签: c segmentation-fault strcmp

我有一个返回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");
}

}

2 个答案:

答案 0 :(得分:3)

当然,如果没有看到tokenize()的代码,就无法回答这个问题。

我的猜测是该函数中存在一些未定义的行为,这可能会破坏堆栈,因此当printf()运行并实际使用更多堆栈空间时,事情就会变坏。具有未定义行为的事情是,它确实未定义,任何事情都可能发生。

在Valgrind中运行代码。

答案 1 :(得分:1)

您的tokenize功能已损坏。代码中的每个指针都需要指向已分配的内存,这不是这里的情况。通过简单地声明指针就没有分配内存:指针只包含地址到分配给其他地方的内存。鉴于您将其设置为指向“其他地方”,如果不这样做,它将指向随机垃圾地址。

所以你需要从头开始重写这个功能。将指向已分配内存的指针作为参数传递,或在函数内动态分配内存。但在此之前,我强烈建议您更多地研究数组和指针,例如阅读C FAQ的this chapter