2016-02-10 9 views
2

Я использую AIX. Есть несколько сообщений о недостатке сегментации в strtok, но я не смог найти никого, кто мог бы мне помочь.Ошибка сегментации strtok, просто дает ошибку сегментации, когда первая строка входного файла пуста

Я пишу программу c, и я хочу прочитать файл в программе, а затем отсортировать эту строку (мне нужны минуты и секунды в конце второй строки).

вот фрагмент из моего кода:

FILE *timeFile; 
    int x, timeElapsed; 
    char line[1000], *temp; 

    int main() 
    { 
     x = 0; 
     timeFile= fopen("time.txt", "r"); 

     if(timeFile==NULL) 
     { 
      printf("\nerror opening file time.txt\n"); 
      printf("\nPlease update system time manually\n"); 
      return 1;//error 
     } 

     while(x<10 && fgets(line, sizeof(line), timeFile)!= NULL) 

     { 

      if(x==1)//we need data from the second line 
      { 

       temp  = strtok(line, " "); 

       printf("\nline: %s",line);//the Output here is as expected 'line: real' 
       printf("\ntemp: %s",temp);//the error occurs here at temp 


       break; 
      } 
      x++; 

     } 
} 

Файл Я пытаюсь читать, имеет это внутри:

real 0m1.25s 
user 0m0.09s 
sys 0m0.02s 

Первая строка является пустой (только символ возврата, я думаю,) и «real 0m1.25s » - вторая строка. Я хочу прочитать только вторую строчку. Ошибка возникает, когда я пытаюсь прочитать временную переменную.

Забавно, что я использовал почти тот же код для одной и той же работы в другой программе, и это сработало. Единственное различие заключалось в том, что во входном файле предыдущего проекта не было пустых строк или вкладок. Поэтому я смущен, пожалуйста, помогите.

PS: Я использую немецкую клавиатуру, поэтому она заглаживает слова самостоятельно, извините за это.

+0

Всегда проверяйте 'strtok()' 'для NULL'. Также обратите внимание, что цикл 'while' абсурден. –

+1

Не могли бы вы рассказать? – ITguy

+2

Я думаю, что мой комментарий очень ясен, вам нужно проверить, что 'temp' не' NULL' после 'strtok()', и абсурдная петля, о которой я думаю, совершенно очевидна. Вы зацикливаете, чтобы получить только вторую строку, что бы я был 'fgets()' один раз, чтобы пропустить первый, а затем 'fgets()' снова, чтобы получить вторую, не так ли? и вообще, если вы хотите пропустить строки 'n' do' for (int i = 0; ((i

ответ