【问题标题】:How can I create array of files in C/C++?如何在 C/C++ 中创建文件数组?
【发布时间】:2012-08-20 15:55:28
【问题描述】:

在 C/C++ 程序中,我这样做是否正确:

int i;
FILE **files = malloc(numFiles * sizeof(FILE *));
std::string file("foo"), ext(".bar");
char *num[10];

for (i = 0; i < numFiles; i++) {
    files[i] = fopen((file + itoa(i, num, 10) + ext).c_str(), "w");
}

这基本上就是我正在做的事情,但我没有将任何内容写入文件。它们是空白的。

编辑

我已经解决了我的问题。我以为我可能在这里做错了什么,但结果却在其他地方。无论如何,感谢您的回复。

【问题讨论】:

  • 是 C 还是 C++?如果您已经在使用std::string,为什么不用其他 C++ 功能来代替原始数组。
  • 嗯,你展示的代码中没有输出操作...
  • 这显然是正确的,但丑陋的 C++(不是 C 或 C/C++)片段。你希望它做什么?
  • 根据我的经验,不管你怎么写,C++ 都很难看。我不是一个超级粉丝。
  • @Luke:如果你试图将它与这样的 C 习语混合起来,那肯定是丑陋的。在我看来,如果你坚持使用本地习语,它可能会相当优雅(如果偶尔有点扭曲)。

标签: c++ c file io


【解决方案1】:

确定它们是空白的,你没有写任何东西,你只是以写模式打开文件!

您必须使用 fwrite 或 fprintf 函数将数据写入文件,然后使用 fclose 关闭文件。

【讨论】:

  • 或者使用stream和ofstream.operator
  • 如果你在编译C++,你需要转换malloc的结果(也就是void*)。而itoa 是一个非标准函数。除此之外,代码似乎还可以。
  • @Luke,如果没有错误,初始化是正确的。你在某处使用fclose 函数吗?
  • 显示一个独立的完整程序来演示您的问题。
  • @elyashiv:性能是不使用 C++ 流类的一个很好的理由。 C 等效项并不容易设置和使用,但它们通常工作得更快。这可能是一个重要的考虑因素,因为开始读取和写入输出流很慢。
【解决方案2】:

你有一组指向 char 的指针。但是你需要char数组。 char *num[10]; --> char num[10]

我想知道它是如何不崩溃的:)

【讨论】:

  • 那只是一个错字……实际程序中不是这样的。
猜你喜欢
  • 2011-01-13
  • 1970-01-01
  • 2017-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多