2016-10-22 5 views
-1

Я очень новичок в программировании, и я пытаюсь написать код, который читает «numbers.tsv4» (.tsv4 означает значения разделенных вкладками, 4 в строку) и помещает числа в массив. Сейчас я просто сосредоточен на подсчете количества чисел в файле, поэтому я могу инициализировать размер массива.Ошибка сегментации при открытии файла в C?

Я продолжаю получать ошибку сегментации, и я изменил так много вещей, чтобы попытаться понять это. Может ли кто-нибудь дать мне руку? Благодаря!

+3

Наиболее вероятной причиной вашего segfault является то, что «numbers.tsv4» не существует, fopen возвращает NULL, ваш код не может его проверить, а fgetc (NULL) взрывается. Постскриптум В противном случае общая логика полностью сломана. В среднем он не будет считать половину символов табуляции в файле. –

+0

Вы отлаживали это, чтобы выяснить, что происходит до segfault? – Carcigenicate

ответ

0

Сложность с вашим заявлением while является проблемой. В начале каждой итерации вы уже получаете следующий символ с fgetc() и назначая его cur. Затем внутри цикла в операторе if(...) вы отбрасываете cur, вызывая новый fgetc() и присваивая результат cur. Таким образом, измените его следующим образом:

while ((cur = fgetc(spData)) != EOF) { 
    if (cur == '\t') { 
    size++;} 
} 

Вы видите, когда вы пытаетесь вызвать fgetc() дважды (оба в while(...) и if(...)), вы, вероятно, получите EOF в if(...) заявлении. Затем на следующей итерации с оператором while(...) вы пытаетесь получить доступ к какой-либо из файла, что дает вам ошибку сегментации.

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