Я пытаюсь разбить строку с 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. с:
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"
в основном модуле.
Вы можете помочь мне с этой ошибкой?
Ваш код выглядит так, как будто он должен работать. Есть пара ошибок - 'getTokenWords' утечки' str', и последнее сравнение не удается из-за! в конце Kleinschreibung! - но это просто приводит к тому, что команда 'error' получает (правильно). Если вы все равно получите segfault, можете ли вы опубликовать полный рабочий пример, пожалуйста? – simonc
gcc и clang оба отлично справляются с этим кодом на MacOS 10.8. gcc 4.2.1. clang 4.0. valgrind clean. –
Я использую gcc версии 4.2.1 (на основе Apple Inc. build 5658) (LLVM build 2336.11.00) – arnoapp