c - strcmp 的段错误,但字符串使用 printf 打印

标签 c segmentation-fault strcmp

我有一个返回 char** 的分词器方法。结果存储在名为 lineTokenschar** 中。当我使用 printf() 打印第一个标记时,我得到了正确的结果,但是当我使用 strcmp(lineTokens[0],"Some text") 时,我出现段错误。适当的代码如下。

lineTokens = tokenize(tempString);
printf("token[0] = %s\n", lineTokens[0]);
if(strcmp(lineTokens[0], "INPUTVAR")==0){
    printf("It worked\n");
}

编辑: 我的分词代码如下

char** tokenize(char* input){
int i = 0;
char* tok;
char** ret;
tok = strtok(input, " ");
ret[0] = tok;
while(tok != NULL){
    printf("%s\n", tok);
    ret[i] = tok;
    tok = strtok(NULL, " ");
    i++;
}
ret[i] = NULL;
return ret;

最佳答案

当然,如果不看 tokenize() 的代码,就不可能回答这个问题。

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

在 Valgrind 中运行代码。

关于c - strcmp 的段错误,但字符串使用 printf 打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29825549/

相关文章:

c++ - 将 C 变量传递给 C++ 函数

c - 什么是位 vector ?

python - 如何创建包含 ppm 图像的二进制光栅数据的 C 字符串

mysql if then 语句不起作用?

c - 未知的 valgrind 错误 C

c - 以下程序中用于字符串比较的段错误

c++ - 用于找出隐式包含哪些文件的 Visual Studio 插件

c - 写入 c 字符串

c++ - 尝试访问类内部的 bool 值时出现段错误

c - 搜索/删除时出现 2-3 棵树分割错误