c++ - 通过 argv[1] C++ 打开文件

标签 c++

我检查了 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/

相关文章:

C++ switch 语句表达式求值保证

c++ - 逐行阅读 C 和 C++?

c++ - C++ 中的模板 - 为什么不调用显式函数?

c++ - Mac 上架构 x86_64 的 undefined symbol

python - Clion 错误 cmake python 嵌入式

c++ - 当用作模板参数时,C++编译器不区分类型和函数名称

c++ - 基类和模板

c++ - 为什么我可以传递这样的字符串参数?这种风格安全吗?

c++ - 存储一组序列化的 protobuf 对象

C++ LNK2019 未解析的外部符号 stdlib