Я бы хотел добавить в файл массив типа «struct classes» (определение приведено ниже). Например, если allClasses[0].title
равно "Math", а allClasses[0].class_id
равно 1, я бы хотел, чтобы файл имел следующий ввод:
1Math/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0
Если добавлен другой класс с заголовком Science, тогда файл должен выглядеть так:
1Math/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/02Science/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0
То, что, похоже, происходит, - то, что, хотя код перехватит часть структуры char в массиве (математика / наука в примере), у него будут проблемы с int, и вместо этого он выведет мусор вместо него (и мусор) часто в разы длиннее 1 символа / 1 int).
Исходя из опыта, формат кода (с небольшими корректировками, конечно) прекрасно работает при использовании структуры с переменными, которые являются только массивами символов. Тем не менее, он дает сбой при использовании целых Это из-за преобразований ASCII или чего-то подобного? Как я могу настроить код так, чтобы я получал входные данные как с массивом int, так и с массивом char?
void addClasses(char *given_title) {
FILE *fp;
fp = fopen("classes.db", "r");
if (numClasses == 0 && fp != NULL) {
findClasses();
}
strcpy(allClasses[numClasses].title, given_title);
allClasses[numClasses].class_id = numClasses + 1;
numClasses++;
fclose(fp);
fp = fopen("classes.db", "w");
for (int i = 0; i < numClasses; i++) {
struct classes *object = malloc(sizeof(struct classes) - 1);
memset(object, 0, sizeof( struct classes ));
object->class_id = allClasses[i].class_id;
strcpy(object->title, allClasses[i].title);
fseek(fp, numClasses * (sizeof(struct classes) - 1), SEEK_END);
fwrite(object, sizeof(struct classes) - 1, 1, fp);
}
fclose( fp );
}
Структура:
struct classes {
int class_id;
char title[30];
};
Немного дополнительного (возможно ненужного) фона для некоторых компонентов в коде: бит в начале метода пытается прочитать файл и начать заполнять массив любыми структурами, которые уже были помещены в файл перед запуском программы. Я не включаю код для этого, так как вышеупомянутый сбой происходит, даже когда у меня есть новый файл classes.db (и, следовательно, даже когда findClasses()
никогда не запускается).
Кстати, небольшая заметка: я не могу изменить class_id на массив char / char. Это должно быть Int.