我遵循教程http://c.learncodethehardway.org/book/ex17.html,"学习C艰难的方式",似乎有一个名为Database_load 的函数的错误:
server.connection({
port: 3000,
routes: {
json: {
space: 4
}
}
});
该函数返回"无法加载数据库。"。
我尝试使用调试器,并查看 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.");
}
下面是cmd输入:
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.");
}
这是节目输出:
PS C:\Users\xyz\workspace_cpp\the_hard_way\ex17> .\ex_17.exe db.dat s 1 ary ary@yahoo.com
我如何进一步探讨这可能导致问题的原因?
答案 0 :(得分:1)
思路:
conn->file
的代码。 (是否可以阅读,模式"r"
或"rb"
?)fread
来电更改为fread(conn->db, 1, sizeof(struct Database), conn->file)
并检查返回值;看它是否大于0但小于sizeof(struct Database)
。getc(conn->file)
,看看是否有EOF或角色。perror()
或打印strerror(errno)
。