как установить указатель файла с помощью fseek - PullRequest
0 голосов
/ 16 марта 2011

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

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

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

Выше, кажется, не работает.

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

Ответы [ 3 ]

1 голос
/ 16 марта 2011

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

1 голос
/ 16 марта 2011

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

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

0 голосов
/ 16 марта 2011

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

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

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

...