我正在尝试用strtok将一个字符串拆分成它的字样。 现在出现了一个奇怪的行为:
使用Xcode和LLVM进行编译时,程序可以正常工作。
但是使用gcc进行编译会在访问strtok
创建的指针时导致错误以下是代码:
char *toTest ="Dieser String hat Groß und Kleinschreibung!";
char* shouldResults[]={"dieser","string","hat","groß","und","kleinschreibung"};
char* tokens = getTokenWords(toTest);
int i = 0;
int error = 0;
while (tokens != NULL){
char * toTest = shouldResults[i];
if(strcmp(tokens,toTest) != 0){
error = 1;
break;
}
tokens = strtok (NULL, " ,.-");
i++;
}
return error;
getWordTokens函数在另一个模块中声明,如下所示: auth.c:
char* getTokenWords(char *text){
char *str = strdup(text);
int i;
for(i = 0; str[i]; i++){
str[i] = tolower(str[i]);
}
char *pch;
pch = strtok (str," ,.-");
return pch;
}
标题如下所示: auth.h
#ifndef _AUTH_H
#define _AUTH_H
//creates tokens out of words from string
char* getTokenWords(char *text);
#endif
我通过添加:
导入auth.h#include "auth.h"
在主模块中。
你能帮我解决这个错误吗?
答案 0 :(得分:1)
函数strtok修改传递给它的字符串。您将指针toTest
传递给它指向字符串文字 - 而不是字符数组。我的猜测是XCode和LLVM将字符串文字toTest
点存储在可写内存中,而gcc将它放在只读内存中。我可能错了,但我会尝试将toTest
声明为数组。
char toTest[] ="Dieser String hat Groß und Kleinschreibung!";