Проблема при работе с файлом СИ
файл имеет такую структуру: в начале 4 байта - число int, показывающее, сколько записей по sizeof(name) записано за ним. Ошибка такая: пока в начале файла число от 0 до 9 всё корректно, как только данное число становится равным 10, 1 символ на выводе затирается. (В последнем цикле как раз добавляется 10 имён в файл) Как можно это исправить?
Заранее спасибо
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
// AO - amount of
// SO - size of
const int AO_buckets = 1;
const int SO_bucket = 104; // 4 байта в начале блока (количество записей (имён по 10 байт) в этом блоке), т.е (10*10) + 4
struct name
{
char _name[10];
};
void add(FILE* stream, name name_)
{
fseek(stream, 0, SEEK_SET);
strcpy_s(name_._name, "Nikolay");
int AO_entries;
fread(&AO_entries, sizeof(AO_entries), 1, stream);
if (AO_entries == 0)
{
AO_entries++;
fseek(stream, 0, SEEK_SET);
fwrite(&AO_entries, sizeof(AO_entries), 1, stream);
fwrite(&name_, sizeof(name_), 1, stream);
return;
}
name temp;
for (int i = 0; i < AO_entries; ++i)
{
fread(&temp, sizeof(temp), 1, stream);
}
int pos = ftell(stream);
fseek(stream, pos, SEEK_SET);
fwrite(&name_, sizeof(name_), 1, stream);
fseek(stream, 0, SEEK_SET);
AO_entries++;
fwrite(&AO_entries, sizeof(AO_entries), 1, stream);
}
void show(FILE* stream)
{
name temp;
int AO_chains;
fseek(stream, 0, SEEK_SET);
fread(&AO_chains, sizeof(AO_chains), 1, stream);
for (int i = 0; i < AO_chains; ++i)
{
fread(&temp, sizeof(temp), 1, stream);
printf_s("%s\n", temp._name);
}
}
int main()
{
FILE* test;
fopen_s(&test, "test.txt", "w+");
if (test == NULL)
{
return -1;
}
for (int i = 0; i < AO_buckets; ++i)
{
int AO_entries= 0;
fseek(test, i * SO_bucket, SEEK_SET);
fwrite(&AO_entries, sizeof(AO_entries), 1, test);
}
name added;
strcpy_s(added._name, "");
for (int i = 0; i < 10; ++i)
{
add(test, added);
}
show(test);
fclose(test);
system("pause");
return 0;
}