fseek с ошибкой SEEK_CUR

#include <stdio.h>
main ()
{
 FILE *fs, *ft;
  char dest[20];
  fs = fopen ("STACKOVERFLOW.txt", "r");
  fseek (fs, 0, SEEK_END);
  fseek (fs, -3, SEEK_CUR);
  fgets (dest, 5, fs);
  printf ("dest value is %s ", dest);
}

Мой файл переполнения стека содержит:

«Я ЛЮБЛЮ STACKOVERFLOW».

Я ожидал вывода «LOW» в качестве последних 3 символов, которые я извлекаю.

Но моя программа печатает только «OW».

Что такое правильное поведение?


person Whoami    schedule 27.09.2014    source источник
comment
Вы уверены, что это все, что есть в файле? Потому что, когда я воспроизвел проблему, я увидел LOW.   -  person Yu Hao    schedule 27.09.2014
comment
Вероятно, у вас есть символ новой строки в конце строки в файле, и это последний символ, за которым следуют W и O.   -  person Michael Petch    schedule 27.09.2014
comment
Я думаю, что у вас есть пробел или символ следующей строки в конце вашей строки. Что вызывает эту проблему. Чтобы быть уверенным, используйте другой оператор тестовой печати и посмотрите, куда идет его вывод.   -  person Hemant Gangwar    schedule 27.09.2014
comment
Свободный поиск не поддерживается для файлов, открытых в текстовом режиме. fseek(fs, -3, SEEK_CUR) может оказаться на байте в середине многобайтовой последовательности, например. UTF-8 или ЮНИКОД. С текстовым файлом Windows вы, вероятно, получите только W.   -  person potrzebie    schedule 27.09.2014
comment
@potrzebie В текстовых файлах поиск начала и поиск смещения, ранее найденного с помощью ftell(), четко определены. Другие поиски не являются.   -  person chux - Reinstate Monica    schedule 27.09.2014


Ответы (1)


Вы почти наверняка включаете символ новой строки в конце файла. Пытаться:

printf ("dest value is %s-xxx- ", dest);

и убедитесь, что -xxx- появляется в следующей строке.

person Diego Basch    schedule 27.09.2014