Im после урока http://c.learncodethehardway.org/book/ex17.html "Обучение C The Hard Way", там, кажется, ошибка с функцией называется Database_load:Fread() не возвращает успешно
void Database_load(struct Connection *conn)
{
int rc = fread(conn->db, sizeof(struct Database), 1, conn->file);
if(rc != 1) die("Failed to load database.");
}
Функция возвращает «Failed для загрузки базы данных ".
Я попытался использовать отладчик и просмотрел документы fread(), но я не могу понять, почему эта функция успешно возвращается.
Я переписал функцию, чтобы распечатать несколько тестов для проверки вменяемости:
void Database_load(struct Connection *conn)
{
printf("Database_load(struct Connection *conn)\n");
if (conn!=0)
{
printf("conn is not null\n");
if (conn->file!=0)
{
printf("conn->file is not null\n");
}//file is not null
}//end conn is not null
//actual read from filesystem
int rc = fread(conn->db, sizeof(struct Database), 1, conn->file);
if (!conn->db!=0)
{
printf("conn->db is not null\n");
}//db is not null
if(ferror(conn->file))
{
printf("Error in reading from file\n");
}
if(rc != 1) die("Failed to load database.");
}
Ниже CMD вход:
PS C:\Users\xyz\workspace_cpp\the_hard_way\ex17> .\ex_17.exe db.dat s 1 ary [email protected]
Это вывод программы:
Database_load(struct Connection *conn)
conn is not null
conn->file is not null
ERROR: Failed to load database.
Как я могу исследовать это, что может быть причиной проблемы?
Вы можете использовать 'perror', чтобы понять, что пошло не так. –
Вы проверяете 'conn! = 0' и все еще разыгрываете' conn', если это появляется, как в книге, перестаньте его читать. –