C语言,文件结构

时间:2012-01-18 23:28:35

标签: c computer-science codeblocks

我正在尝试创建一个包含两个文件指针的结构。 (见下文)

    typedef struct dataFiles
    {
        FILE * inputSet;
        FILE * outputSet;
    }fData;

我希望能够使用它来使用函数来打开和关闭文件,我在这里有一个:

    void openFiles(struct dataFiles * fiData)
    {
        fiData->inputSet = fopen("inputfile.txt","r");
        fiData->outputSet = fopen("outputfile.txt","o");
        return fiData;
    }

在main函数中,我首先将struct声明为:

    fdata * fileData;

然后尝试通过以下方式访问它:

    openFiles(&fileData);

我的程序运行并编译,但是我在将输入文件中的数据导入结构时遇到问题,当我检查输出时,它全部为0。任何有关如何实现此类代码的一般提示将不胜感激。 (注意:这是一个关于学校作业的问题,但是,我已经满足了作业的要求,我只是为了自己的好奇心而感兴趣)〜谢谢!

4 个答案:

答案 0 :(得分:1)

声明如下:

fdata fileData; //This memory is on the stack, not the heap

内存可以位于堆栈和堆中的两个位置。堆栈上的内存不需要分配,只需要获取它的引用即可。因此,&fileData将为您提供所需的指针。但是,您无法返回指向堆栈上数据的指针。因此,您需要一个指向堆的指针。要在堆中创建指向内存的指针,请使用所需内存的大小调用malloc。在这种情况下,它是malloc(sizeof(fileData))。这将返回一个void *,您需要将其转换为fileData *。

也将

 void openFiles(struct dataFiles * fiData)
更改为
 fData openFiles(struct dataFiles * fiData)

答案 1 :(得分:0)

而是将其声明为

fdata fileData;

然后

openFiles(&fileData);

如果您将fileData声明为fdata *,那么&fileData的类型fdata **将与您的函数参数的类型不匹配。

答案 2 :(得分:0)

您正在使用变量混合指针。要使您的函数正常工作,您应该声明fileData,如下所示:

fdata fileData;

(没有指针),并移除return中的openFiles。由于参数被引用修改,因此不需要它。

答案 3 :(得分:0)

您有类型问题。 openFiles应该fData*,但您会将fData**传递给它。 你应该做点什么:

fileData=malloc(sizeof(fData));
openFiles(fileData);

修改:或者只需将类型更改为fileDatafData,然后传递其地址。