как установить указатель на файл с помощью fseek

Я знаю, что мой указатель файла находится в конце строки после печати этой строки: «xyz».

Как я могу получить его в начале строки? (показывая на х)

offset = ftell(fp);
fseek(fp, offset - sizeof("xyz") , SEEK_SET);

Выше вроде не работает.

Как я могу этого добиться?


person hari    schedule 16.03.2011    source источник


Ответы (3)


Я бы сохранил смещение, выдав beginning = ftell(fp) перед чтением/записью вам «xyz». Затем fseek(fp, beginning, SEEK_SET);

Возможно ли это?

person M'vy    schedule 16.03.2011

sizeof("xyz") вернет 4, так как у вас есть три символа плюс завершающий нуль. Вместо этого вы должны использовать strlen("xyz") или вычесть единицу из результата sizeof, чтобы учесть значение null.

person David Paxson    schedule 16.03.2011

Поскольку тип "xyz" равен char const *, sizeof("xyz") вернет размер стандартного указателя, обычно 4 или 8.

Также обратите внимание, что fseek не работает в текстовом режиме, только если файл был открыт в двоичном режиме, поскольку невозможно определить, насколько велики символы новой строки в базовой хост-системе.

Кроме того, лучше использовать SEEK_CUR, так как это будет больше точки чтения/записи относительно текущей позиции.

person Lindydancer    schedule 16.03.2011
comment
Нет, тип const char[]. Дэвид Паксон получил правильное значение, полученное в результате sizeof(). - person Heath Hunnicutt; 16.03.2011
comment
Конечно. Теперь, когда вы упомянули об этом, я помню, что действительно использовал его (когда пытался написать самую маленькую в мире программу Hello World на C для Amiga, около 15-20 лет назад). - person Lindydancer; 16.03.2011