Проблема при работе с файлом СИ

файл имеет такую структуру: в начале 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;
}

Ответы (0 шт):