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)

Ответы на вопрос(6)

Ваш ответ на вопрос