gpt4 book ai didi

c++ - 在 C++ 中创建动态文件指针

转载 作者:行者123 更新时间:2023-11-27 22:52:45 25 4
gpt4 key购买 nike

#include <QCoreApplication>
#include <stdio.h>

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

FILE *fp;
fp = new FILE [2];

fp[0] = fopen ("temp.txt", "w");
fp[1] = fopen ("temp.txt", "w");

fputs ("What is your name?\n", fp[0]);
fputs ("My name is XXX.\n", fp[1]);

return a.exec();
}

我想使用 Qt 的功能,因此 Qt 包括在内。

错误是:

error: no match for 'operator=' (operand types are 'FILE {aka _IO_FILE}' and 'FILE* {aka _IO_FILE*}')
fp[0] = fopen ("temp.txt", "w");
^

error: cannot convert 'FILE {aka _IO_FILE}' to 'FILE* {aka _IO_FILE*}' for argument '2' to 'int fputs(const char*, FILE*)'
fputs ("What is your name?\n", fp[0]);
^

请让我了解这些错误的原因。

最佳答案

在 C 标准库中,stdio.hFILE 是所谓的“不透明类型”。基本上,您不知道,也不想知道 FILE 是什么、包含什么或解析成什么。这样做是为了便携性。相反,通过键入 FILE*,您可以通过指向 FILE 的指针来表示文件,无论 FILE 是什么。如果查看 stdio 库,您会发现所有 处理文件的函数都将 FILE* 作为参数,而不是一个 FILE。毕竟,您不应该永远自己创建一个FILE对象!

现在,你的代码...

FILE *fp;

声明 FILE* 类型的变量 fp

fp = new FILE [2];

将 2 个 FILE 的新数组的地址分配给 fp不好!您永远不应该自己操作FILE,而应该操作FILE*。所以,试试这个。

FILE *fp[2];

这将声明一个名为 fp 的包含两个 FILE 指针的数组。您的其余代码应该可以正常使用。碰巧你在这里不需要 new (那是用来在堆上分配的),而且很浪费。您甚至都没有删除它!如果您有 Java 背景,请阅读构造函数和 operator new 之间的区别,以便让您自己更清楚一些。

我希望这对您有所启发!

关于c++ - 在 C++ 中创建动态文件指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35931958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com