我试图将动态1D整数数组作为输入。情况是我不知道我会有多少输入。我有以下代码,但我知道它错了。你能告诉我如何实现这个目标吗?
int main(string path,string aligned_path,vector<int>cams)
{
string path = "/home/iiith/resect/output.txt";
findpoints(cams,path);
}
凸轮的大小实际上是未知的。我不知道他们会提供多少个凸轮作为输入。我试图实现类似下面的内容
./a.out path1 path2 1 2 3 5 6
最后的数字将是凸轮。它可以是任意数量的凸轮。是否可以将它们作为输入接收?是否有可能像上面那样具有动态的inut参数。请帮帮我。这会非常有帮助。在此先感谢
答案 0 :(得分:5)
您对main
的定义无效。在C和C ++中,main具有严格的定义(尽管如果不使用则可以忽略参数):
int main(int argc, char **argv)
常见的扩展是传入环境变量:
int main(int argc, char **argv, char **envp)
如果根本没有使用参数:
int main()
main
的参数定义如下argc
是参数列表中的元素数。以下每个argv[0]
.. argv[argc-1]
都包含函数的参数。 argv[0]
是可执行文件本身的名称。您的示例argv[1]
为path1
。
因此,您知道基于cams
的{{1}}有多少argc
。当然,您必须将argv[x]
中的字符串值复制到向量中的相关位置,或许使用std::stoi(...)
使其成为整数值。
答案 1 :(得分:2)
main
的签名必须为int main(int argc, char* argv[])
(或等效,或int main()
)。您可以将参数处理为在您自己的代码中更有用的内容。这是一个快速而草率的例子(没有适当的错误处理等)。
#include <iostream>
#include <cstdlib>
#include <vector>
int main(int argc, char * argv[])
{
std::vector<int> nums;
nums.reserve(argc-3);
int pos = 3;
// Read args into vector of ints
while (pos < argc)
{
nums.push_back(atoi(argv[pos]));
++pos;
}
// Print them
for (auto i : nums) std::cout << i << '\n';
}
这是一个运行:
$ ./a.out path1 path2 1 2 3 5 4
1
2
3
5
4
以防万一:argc
包含传递的参数数量,包括程序名称。对于$ ./a.out
argc=1
,$ ./a.out some list of args
argc=5
。
然后argv
是包含每个参数文本的c
- 样式字符串(NUL
- 终止const char *
s)的数组。
请注意,严格来说argv
数组比它需要的长1,并且最后一个条目保证是NULL指针。
对于标准极客,我没有正确的C++
2011标准,这是来自N3337:
3.6.1主要功能
...
2实现不应预定义
main
函数。此功能不应过载。它应该有一个 返回类型int
的类型,但其类型是 实现定义。所有实现都应允许两者 以下main
的定义:
int main() { /* ... */ }
和
int main(int argc, char* argv[]) { /* ... */ }
后一种形式
argc
应该是从中传递给程序的参数数量 程序运行的环境。如果argc
非零 参数应在argv[0]
至argv[argc-1]
中提供 指向以null结尾的多字节的初始字符的指针 字符串(ntmbs s)(17.5.2.1.4.2)和argv[0]
应该是指针 ntmbs的初始字符,表示用于的名称 调用程序或“”。argc
的值应为非负数。该argv[argc]
的值应为0
。 [注意:建议任何 在argv
之后添加更多(可选)参数。 - 后注]