所以我打开一个文件,到最后查看它有多长,然后回到开头导致分段错误(核心转储)。什么天啊?
...
FILE *passkey;
passkey = fopen("pass.key", "r+");
fseek(passkey, 0, SEEK_END);
filesize = ftell(passkey);
rewind(passkey);
...
倒带会导致分段错误。它与开头的fseek一样。为什么这样做?
答案 0 :(得分:0)
C中的fseek函数的seg错误几乎总是由fopen失败引起的。确保您尝试打开的文件确实存在。如果你有可能依靠r +参数为你创建一个新文件,那么你就错了,r + 不在C中创建一个新文件。尽可能尝试验证fopen的返回值。万一你不知道倒带只是一个fseek到文件的开头,这就是为什么你也可能在那里遇到问题。希望这有帮助!
快乐的编码!
答案 1 :(得分:0)
这更像是一个扩展的评论,而不是一个正确的答案。以下是您的代码必须的样子:
FILE *passkey;
if (!(passkey = fopen("pass.key", "r+")) {
perror("pass.key");
exit(EXIT_FAILURE);
}
if(-1 == fseek(passkey, 0, SEEK_END)) {
perror("pass.key");
exit(EXIT_FAILURE);
}
if(-1 == (filesize = ftell(passkey)) {
perror("pass.key");
exit(EXIT_FAILURE);
}
rewind(passkey);
这段代码很可能没有到达最后一行。但如果确实如此,则问题必定在其他地方。然后我建议使用内存调试器(例如valgrind
或Electric Fence)运行程序。