【发布时间】:2015-01-03 13:57:49
【问题描述】:
我不明白我所犯的错误。 我尝试了很多,但我无法读取我的文件。 基本上,我根据帐户数量将结构写入名为 0.txt / 1.txt / 2.txt ... 的文件中。 我真的花了几个小时来解决我的问题,但我不明白我该如何解决以及为什么会出现错误。 我在编译我的代码(使用 dev c++)时也没有问题,但是当我按下加载帐户按钮时,我得到错误“Segmentation Fault”(使用 Windows 7)。 我注意到问题出在函数ladeAccounts() 中的fread() 行。 我的结构的名称是“iAccount”。 变量 infoma 是 iAccount 类型的,而 newAccount() 中的 int anzahl 类型的“现有帐户数”决定了路径。
iAccount 如下所示:
struct iAccount
{
string ID;
string password;
int level;
};
这就是我将 STRUCT 写入 FILE 的方式:
void Account::newAccount(int anzahl, string username, string pw, int lvl)
{
iAccount neu;
neu.ID = username;
neu.password = pw;
neu.level = lvl;
ss.str("");
ss<<anzahl;
s = ss.str();
s = "Accounts/"+s+".txt";
f1 = fopen(s.c_str(), "w");
fseek(f1, 0, SEEK_SET);
fwrite(&infoma, sizeof(iAccount), 1, f1);
fclose(f1);
}
这就是我读取文件的方式(调用 fread() 时出现错误
void Account::ladeAccount(int nummer)
{
stringstream sa;
iAccount account_geladen;
sa.str("");
sa<<nummer;
s = sa.str();
s = "Accounts/"+s+".txt";
f2 = fopen(s.c_str(), "r");
fseek(f2, 0, SEEK_SET);
fread(&infoma, sizeof(infoma), 1, f2);
fclose(f2);
}
感谢您的帮助。我不知道我的问题出在哪里,正如我所说,我正在寻找几个小时。
编辑: 文件打开了,我试过了(f2 是真的!)。
编辑”: ERRNO = 0 !!!
看这里:
ostringstream Str;
Str << errno;
infoma.ID = Str.str();
这样做是为了在我的 wxtextlabel 中查看 errno 的结果。
【问题讨论】:
-
I realy seached hours to fix my problem调用可以返回成功或失败的函数时,应检查返回值。你在没有检查返回值的情况下调用了fopen——不好。
标签: c++ segmentation-fault fread