Я использую 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: Я использую немецкую клавиатуру, поэтому она заглаживает слова самостоятельно, извините за это.
Всегда проверяйте 'strtok()' 'для NULL'. Также обратите внимание, что цикл 'while' абсурден. –
Не могли бы вы рассказать? – ITguy
Я думаю, что мой комментарий очень ясен, вам нужно проверить, что 'temp' не' NULL' после 'strtok()', и абсурдная петля, о которой я думаю, совершенно очевидна. Вы зацикливаете, чтобы получить только вторую строку, что бы я был 'fgets()' один раз, чтобы пропустить первый, а затем 'fgets()' снова, чтобы получить вторую, не так ли? и вообще, если вы хотите пропустить строки 'n' do' for (int i = 0; ((i