我检查了 argv[1]
中的参数是否对我的文件有效。
我在其自己的子程序中有一个菜单系统,该子程序在主程序中调用。
读取文件等是在与第一个子例程分开的另一个子例程中完成的,也在主例程中调用。
如何将 argv[1]
转移到第一个子例程?甚至是第二个?
string sArgInit = argv[1];
这样我就可以使用 C 字符串打开文件。
但我无法将字符串获取到 main.. 之外的任何函数
有没有办法做到这一点,而不是: 全局变量, 将字符串作为参数参数传递给子例程。
最佳答案
以下代码展示了如何准确地执行您想要的操作,检查 argv[1] 是否存在,然后将其作为 C 字符指针或 C++ 字符串传递给函数,并在该函数中使用该值。
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
static void f1 (char *s) {
cout << "1: " << s << endl;
}
static void f2 (const string& s) {
cout << "2: " << s << endl;
cout << "3: " << s.c_str() << endl;
}
int main (int argc, char *argv[]) {
if (argc < 2) {
cout << "Usage: " << argv[0] << " <test_string>" << endl;
return EXIT_FAILURE;
}
char *s1 = argv[1];
string s2(argv[1]);
f1 (s1);
f2 (s2);
return EXIT_SUCCESS;
}
输出如预期的那样:
1: hello
2: hello
3: hello
至于您的编辑,您不能访问 argc/argv 除非将它们存储在全局中或将它们传递给函数。这是因为它们作为参数传递给 main
函数,因此对于该函数来说是固有的本地参数。
关于c++ - 通过 argv[1] C++ 打开文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/548509/