C - Неожиданная ошибка сегментации на strtok (…)
Я использую strtok (...) из библиотеки, и она работает нормально до конечного состояния, что приводит к ошибке сегментации и аварийному завершению программы. API утверждает, что strtok (...) будет выдавать NULL, когда токенов больше не будет, что означало, я думал, что вам нужно было перехватить этот NULL, чтобы завершить все циклы, которые вы запускали с использованием strtok ( ...). Что мне нужно сделать, чтобы перехватить этот NULL, чтобы предотвратить сбой моей программы? Я предположил, что NULL был разрешен для использования в качестве условия завершения.
Я подготовил SSCCE для вас, чтобы наблюдать это поведение. Мне нужен strtok (...) для работы с гораздо большим программным обеспечением, которое я пишу, и у меня точно такое же поведение при сегментации. Вывод в командной строке показан под этой виньеткой кода (да, я знаю, что вы используете <...> вложить библиотеки, но у меня были трудности с получением этого поста для отображения библиотек кода). Я использую gcc версии 4.5.3 в ОС Windows 8, и ниже показаны два различных варианта того, как я могу представить, что можно попытаться перехватить NULL в цикле.
#include
#include
#include
#include
#include
#include
#include
main(){
char* from = "12.34.56.78";
char * ch = ".";
char * token = strtok(from, ch);
printf("%s\n",token);
while(token != NULL){
token = strtok(NULL, ch);
printf("%s\n", token);
}
printf("Broke out of loop!");
while(strcmp(token, 0) != 0){
printf("%s\n",token);
token = strtok(NULL, ch);
}
}
############ OUTPUT: ############ $ ./test 12 34 56 78 Segmentation fault (core dumped)