我正在以艰难的方式完成学习book并在练习17中遇到了一些问题。在示例代码中,我们创建了一个自定义数据库并将其写入文件。然后我们再次阅读它以进行编辑。
struct Connection *Database_open(const char *filename, char mode)
{
struct Connection *conn = malloc(sizeof(struct Connection));
if (!conn) die("Memory error");
conn->db = malloc(sizeof(struct Database));
if (!conn->db) die("Memory error");
if (mode == 'c') {
conn->file = fopen(filename, "w");
}
else {
conn->file = fopen(filename, "r+");
if (conn->file) {
Database_load(conn);
}
}
if (!conn->file) die("Failed to open the file");
return conn;
}
看来我可以创建数据库ok(在'c'模式下)但是当我回去尝试阅读时
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.");
}
rc
始终为0.
我已经尝试了大量的实验来阅读写作文件,而我最接近它的工作就是将文件读成二进制文件,即
else {
conn->file = fopen(filename, "rb+");
这导致rc不为0但是它似乎破坏了程序的其他部分。
有没有其他人可以尝试其他任何东西?我需要提到的唯一另一件事是我在Visual Studio 2013上构建并且示例代码是用于gcc的,这是否会产生影响?
我只包含我认为相关的来源,但full code is here如果它有助于回答。
谢谢!
答案 0 :(得分:1)
我发布的代码中没有任何错误,您的代码用于gcc的事实并不重要。 它可能是您文件中的错误,是文本文件还是二进制文件?在最后一种情况下,您可以使用实用程序作为HxD进行探索。
祝你好运