繁体   English   中英

将 bash 参数传递给 C++

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM