2

我要做的是编写一个函数来创建一个文件,用数据填充它并将文件返回给 main()。问题是 - “返回文件”的正确方法是什么。我应该传递指针/文件描述符还是忽略所有这些并使用文件名?

编辑:做正确的方式(我希望):

int mkrandfile(const char *name, int range, int qnt) 
{
    FILE *afile;
    int i = 0;

    if (afile = fopen(name, "w+"))
    {
        while((i <= qnt) && fprintf(afile, "%d ", rand() % range - range/2))
            i++;
        fclose(afile);
        if (i != qnt + 1)
            return -2;
    }
    else
        return -1;
}
4

1 回答 1

3

您是正确的,afile从该函数返回是错误的。一旦文件关闭,该文件句柄就不再有效。调用者使用它会导致未定义的行为。

虽然从模块化的角度来看这可能不是最好的主意,但您可以让文件保持打开状态,然后返回句柄。但我认为以下之一可能会更好:

  • 将打开的文件句柄传递给函数(让调用者打开和关闭它)。
  • 让调用者自己再次打开文件。

考虑到操作系统的文件缓存(如果在此处适用)时,第一个选项可能更有效。

于 2012-12-04T23:18:38.733 回答