我一直收到分割错误,并将其缩小到一行(这是下面代码中的"fseek"行 - 我注释掉了它下面的所有内容,但仍然得到错误,但当我注释掉那行时没有得到它。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *f_in, *f_out;
f_in = fopen(argv[1], "rb");
fseek(f_in, 0, SEEK_SET);
return 0
}
所有其他代码似乎都很好,所以我没有包含它。我尝试在fseek行之前添加一行:"fseek(f_in,0,SEEK_END);"。我也尝试过将 0 更改为其他数字,并在 fseek 之前做一个 fread,但总是得到分割错误。有谁知道那条线(或者另一条线,如果它实际上不是那条线)有什么问题?
检查对fopen()
的调用是否失败:
f_in = fopen(argv[1], "rb");
if ( NULL == f_in )
{
// handle error
.
.
.
假设实际代码在访问 argv[] 之前检查 argc,并且如果不存在参数,则显示适当的"usage"消息。
有必要检查来自 fopen(和 fseek)的返回值以确保操作成功。
如果这段代码在 fseek() 上失败,几乎可以肯定 fopen 失败了。
导致f_in包含 NULL 而不是指向文件描述符对象的有效指针。