访问strtok指针时出现分段错误

时间:2013-11-19 17:24:33

标签: c string strtok

我正在尝试用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"

在主模块中。

你能帮我解决这个错误吗?

1 个答案:

答案 0 :(得分:1)

函数strtok修改传递给它的字符串。您将指针toTest传递给它指向字符串文字 - 而不是字符数组。我的猜测是XCode和LLVM将字符串文字toTest点存储在可写内存中,而gcc将它放在只读内存中。我可能错了,但我会尝试将toTest声明为数组。

char toTest[] ="Dieser String hat Groß und Kleinschreibung!";