【发布时间】:2015-04-23 13:51:31
【问题描述】:
我有一个返回 char** 的标记器方法。结果存储在名为lineTokens 的char** 中。当我使用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;
}
【问题讨论】:
-
I get the correct result,...undefined behaviour 的可能副作用。 -
欢迎来到 StackOverflow!您是否尝试过使用 gdb 等调试器或 valgrind 等内存工具?
-
该错误很可能在发布的代码之外。
-
需要更多细节。发布您的
tokenize()代码。 -
我打赌
tokenize有一个局部变量,例如char* result[10];和it does areturn result;。这将返回局部变量的地址。局部变量的内存在printf处仍然有效,但printf消耗了足够多的堆栈,以至于当它返回时,内存不再有效。
标签: c segmentation-fault strcmp