[英]Passing bash parameters to c++
我尝试将两个参数从 bash 传递给要使用的 C++ 程序,但似乎无法让它完全正确地工作。 我会在 linux 命令行中使用命令./bash "Turtle" "Cat"
。
#!/bin/bash
./main.out $1 $2
但是 C++ 文件只会从argv
读取./main.out
。 cout
只会打印./main.out
截断版本,例如./main.out
然后/main.out
然后main.out
。 我在 bash 文件的位置中是否错误地使用了参数?
int main(int argc, char *argv[]) {
cout << argv+0 << endl;
cout << argv+1 << endl;
cout << argv+2 << endl;
return 0;
}
这是因为您没有将参数打印为字符串,而是打印它们的内存位置。 在 clang++-9(我测试过的)中,这是将指针传递给 std::cout 时发生的情况,在许多编译器(MSVC,如果我错了,请纠正我)这只会打印任何内容。
您需要做的是将其作为数组索引引用并打印
int main(int argc, char **argv) {
cout << argv[0] << endl;
cout << argv[1] << endl;
cout << argv[2] << endl;
return 0;
}
当使用 clang++-9 编译时,上面的代码对我来说工作正常(在执行时手动传递参数)。 如果您打算使用此代码,您还应该检查是否至少有 3 个参数( argc
值),否则在索引 argv 时您可能会指向无效内存
还要尽量避免 std::endl 并使用 "\\n" 代替,std::endl 不必要地刷新缓冲区,并且在 99% 的情况下都不需要
你的 bash 文件没问题。 问题出在您的 C++ 中。 尝试这样的事情:
#include <iostream>
int main(int argc, char **argv) {
std::cout << argv[1] << "\n";
std::cout << argv[2] << "\n";
}
[警告:这不会检查错误,所以如果你不传递任何参数,它会表现得很糟糕。]
char *argv[]
是指针的指针(与char **argv
相同),你需要
cout << argv[1] << endl;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.