C - 将可变数量的命令行参数传递给具有可变数量参数的方法

标签 c command-line-arguments variadic-functions

我正在编写一个 C 程序,它将采用可变数量的命令行参数。然后我需要将这些参数传递给一个函数,该函数将可变数量的文件名作为单独的参数(使用 va_arg 获取函数内部的参数),原型(prototype)为:

void FindFile(char *filename1, ...);

我的 FindFile 实现很好。我的问题是,如何在 main 方法的“char *argv[]”中获取可变数量的参数,并在调用 FindFile 时将它们用作参数?

这是一个类的赋值,所以不能更改 FindFile 原型(prototype)。我一直在寻找使这项工作可行的方法,只找到一个答案,说这是不可能的。事实真的如此吗?这是我的教授给出的确切规范,所以我认为它在某种程度上是可能的,但类里面没有讨论确切的方法。

最佳答案

不可能可以做的(至少在 K&R、ansi-c 和 c99 中,除非依赖于实现的技巧)是在运行时将选定的命令行参数附加到某种参数列表时间并将其传递给您的函数。太糟糕了,因为这是第一个想到的事情。

这使您的问题之一是弄清楚您可以 做什么。例如,您可以每次调用(给定的 varidac 函数为)FindFile(fname, argc, argv);。编写这样的代码而不是仅仅给 FindFile 一个固定的签名是很愚蠢的(真的,非常非常愚蠢),但是给定的 FindFile 的可变参数版本可以写成管理得很好。

如果您只想传递一些命令行参数,您可以创建一个新的 char*[],只包含您想要的参数并将其传入。

关于C - 将可变数量的命令行参数传递给具有可变数量参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14867923/

相关文章:

java - 捕获符号 "*"作为 java 程序中的参数

go - 在 Go 中连接两个 slice

python-3.x - 使用 ctypes 将带有省略号样式的 varargs 的 c 函数转换为等效的 python

c - `fopen()` 的垃圾回收?

c - 使用指针函数的程序方差和标准差

c - scanf 函数在 GCC ubuntu 上不起作用

C 在 scanf() 处无限循环

python - 使用 subprocess.call() 将参数传递给 FFMPEG

python - ArgumentParser.add_argument : How to use action parameter with custom type parameter?

generics - 具有任何参数列表的函数的通用仿函数