2013-08-26 2 views
1

Я создал программу, которая предположительно полностью оправдывает текст, который вводится в класс, за исключением случаев передачи слов на вывод, отображаются ошибки, и я не уверен, почему, но это заканчивается тем, что вызывает ошибка сегментации при запуске программы. Что вызывает эту ошибку и как я могу это исправить?C Сбой сегментации с использованием strtok

void format_text(int * option_stats, unsigned width, char * text) 
{ 
    int x = 0, y = 0, spaces = 0, remain = 0, j = 0; 
    char* words, output; 
    char temp[200] = {" "}; 
    words = strtok(text, " "); 
    while (words != NULL) 
    { 
     if (y + strlen(words) < width) 
     { 
      strcpy(temp, words); 
      strcat(temp, " "); 
      y += strlen(words) +1; 
      spaces += 1; 
      words = strtok(NULL, " "); 
     } 
     else if(y + strlen(words) == width) 
     { 
      strcpy(temp, words); 
      printf("%s\n", temp); 
      y = 0; 
      spaces = 0; 
     } 
     else if(spaces > 1) 
     { 
      remain = width - (y - 1); 
      j = remain % (spaces - 1); 
      remain = (remain-j)/(spaces-1); 
      output = strtok(temp, " "); 
      while (output != NULL) 
      { 
       printf("%c", output); 
       if(j > 0) 
       { 
        printf(" "); 
        j--; 
       } 
       output = strtok(NULL, " "); 
       y = 0; 
       spaces = 0; 
       words = strtok(NULL, " "); 
      } 
     } 
     x += (strlen(words) + 1); 
    } 
} 
+2

Привет. Вы должны использовать отладчик, чтобы определить, какая строка вызывает seg-fault, а затем отступить оттуда, проверив текущие значения переменных и т. Д. –

+0

Какая строка показывает segfault? Проложить видимый длинный код, который, по-видимому, является частью программы, не помогает, просто покажите, где вы получаете эту ошибку? – 0decimal0

ответ

6

Вы используете output как char * в

while (output != NULL){ 

и

output = strtok(NULL, " "); 

Но output объявлен как простой char

char* words, output; 

Посмотрите Question 1.5 of C-FAQ

-1

Переменная output имеет тип char

+0

Почему это неправильно? можете ли вы объяснить немного больше? –

Смежные вопросы