【问题标题】:C function fopen(); error: too many arguments to the functionC 函数 fopen();错误:函数的参数太多
【发布时间】:2019-07-20 22:14:16
【问题描述】:

为什么我不能这样做?

fopen("%s",stringarray,fpointer);

上面返回一个错误,说明函数参数太多。

但这行得通,

fopen("file.txt",fpointer);

我怎样才能解决这个问题?是不是必须修改代码中的headers?

【问题讨论】:

  • stringarray是什么类型?
  • char 字符串数组 [32];
  • 这里似乎对 C 函数的一般工作方式存在一些误解。您是否知道printf()(与"%s" 一起工作的那个)非常特别,并且并非所有函数都这样工作?你为什么要首先打电话给fopen("%s", stringarray, fpointer)?您想在这里实现什么目标?
  • 用户输入要创建的文件名的程序
  • printf 样式格式说明符不是语言的固有部分,格式字符串在运行时由函数本身解析,而不是由编译器解析。它们用于格式化输出或输入;将一种形式的数据转换为presentation的字符串表示或从字符串表示转换。这在这里完全无关紧要。你不需要“绕过这个问题”,因为没有问题,除了你对一些基本概念的理解。

标签: c gcc compiler-errors fopen


【解决方案1】:

你不能打电话

fopen("%s",stringarray,fpointer); 

因为这不是fopen 的工作方式。你不能用你想要的方式来调用这样的标准函数——你必须按照the documentation 所说的方式来调用它。你不能打电话

 fopen("file.txt",fpointer);

要么。你必须调用类似的东西

fpointer = fopen("file.txt", "r");

假设你已经声明了

FILE *fpointer;

这样fpointer 将成为您读取文件file.txt 时的“打开文件指针”或“文件句柄”。

【讨论】:

  • 无论如何我可以解决这个问题?就像在其他库或头文件中按我想要的方式工作的其他函数一样(我需要使用用户输入的字符串数组作为文件名)
  • 解决这个问题很容易——只需阅读the documentation 获取fopen 并正确调用它。 (或重新阅读我更新的答案。)
  • 但总的来说,请不要尝试通过反复试验来学习C。这是some class notes,您可以在正确打开和读取文件时阅读。
【解决方案2】:

假设stringarraychar *(实际上是chararray),只需将其直接传递给fopen。不用%s格式化,已经是字符串了。

FILE *fp = fopen(stringarray, "r");

C 中的函数采用非常、非常、非常具体的参数。 fopen 将文件名作为 char * 并将打开文件的模式(读取、写入等)作为另一个 char *。它返回一个指向打开文件的指针,如果有错误则返回 NULL。


如果您确实需要进行某种格式化,您可以使用sprintf 进行格式化并将结果传递给fopen

// Allocate memory to store the result of sprintf
char filename[256];
char name[] = "foo";

// filename = foo.txt
sprintf(filename, "%s.txt", name);

// Open foo.txt
FILE *fp = fopen(filename, "r");

【讨论】:

    【解决方案3】:
    fopen (const char *filename, const char *mode)
    

    如果您查看fopen 函数,它只需要两个参数作为输入。所以,你不能像fopen("%s",stringarray,fpointer); 那样使用它。有关fopen() 的更多信息,请访问here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-17
      • 2010-12-16
      • 2018-04-22
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多