【问题标题】:How to declare a dynamic array of pointers to files如何声明指向文件的指针的动态数组
【发布时间】:2014-01-06 08:42:08
【问题描述】:

我试图动态创建一个指向文件的指针数组。要求用户输入一个整数来表示大小,我需要创建一个具有该大小的指针数组。

 FILE** arrOfFiles = NULL;
 printf("Enter the number of units\n");
 scanf("%d", &numOfUnits);
 arrOfFiles = (FILE**)malloc(sizeof(FILE*)*numOfUnits);

这个声明对我想做的事情有好处吗?我只是不想确定。 谢谢。

【问题讨论】:

  • 尝试使用-Wall-Wextra 选项进行编译。您在这条线上看到任何警告吗?如果是,请纠正它们。在这种情况下,如果您不确定自己是否以正确的方式做某事,您应该始终服从编译器。顺便说一句,不建议对malloc 的返回值进行类型转换。
  • 顺便说一下,不要把 malloc 的结果转换成 C plz ;)
  • 除了无用的演员表,我看不出你的代码有什么问题。
  • 使用 calloc(numOfUnits, sizeof(FILE*) ),这会自动将每个字节初始化为 0。

标签: c arrays file pointers


【解决方案1】:

您需要检查 numOfUnits 的值是否在 (1, some_number) 范围内,并且只有在数字合理时才调用 malloc。

正如 cmets 所说,无需在 C 中强制转换 malloc 的返回值。如果此代码将移植到 C++,您将需要强制转换。

【讨论】:

  • 是的,当然,我确保输入大于 0。顺便说一下,在 malloc 之后,在我检查 FILE** arrOfFiles 以打开我在调试中看到的文件 arrOfFiles指向null,这有意义吗?
  • 你也应该检查一个高数值。如果 malloc 成功,它不应该指向 NULL。
【解决方案2】:

无需转换为纯 C。CHeck this

只要这段代码没有移植到 C++ 中,它就可以在没有强制转换的情况下正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    相关资源
    最近更新 更多