Ответ на запрос о записи примера - при условии фиксированного размера записей:
enum { RECSIZE = 256 };
char buffer[RECSIZE];
FILE *fp = ...; // File to read from and write to
int recnum = 37; // Counting from record 0
long offset = recnum * RECSIZE;
if (fseek(fp, offset, SEEK_SET) != 0)
...error...
if (fread(buffer, sizeof(buffer), 1, fp) != 1)
...error...
...modify buffer...
if (fseek(fp, offset, SEEK_SET) != 0)
...error...
if (fwrite(buffer, sizeof(buffer), 1, fp) != 1)
...error...
Повторите код от объявления recnum
до конца один раз для каждой записи, которая должна быть изменена (подумайтеloop).
С записями переменного размера, которые изменяют размер по мере их редактирования, вам придется работать намного усерднее - настолько, что, вероятно, будет проще скопировать старый файл в память по одной записи за раз,измените запись соответствующим образом, а затем запишите измененную запись в новый файл.