c++ - 将值传递给 main(int, char**)

标签 c++ visual-c++ gcc

我有一个显示 ascii 值和字母的程序,但现在我修改了程序以仅显示我要查找的西类牙文字符。该程序被称为,是的,你明白了,“ascii”。用户需要做的是输入C:>asciiC:>ascii all 来显示所有的ascii 字符。要仅显示西类牙字符,用户必须键入 C:>ascii es

为此我写了这个简单的程序

int main(int argc, char** argv) {
    if(argv[0] == "es"){
        abc::ascii_es();        
    }
    if(argv[0] == "all"){
        abc::ascii_all();
    }
    else
        abc::ascii_es();

    return 0;
}

但是程序总是跳转到else条件关键字中的ascii_es方法。 我做错了什么?

最佳答案

问题:

  1. 您不是在比较字符串,而是在比较指针。您可以通过将参数之一更改为 std::string 或使用 strcmp(...) == 0 来解决此问题。
  2. argv[0] 是您的程序的名称。使用 argv[1] 作为第一个参数。
  3. 您没有检查程序是否有参数。如果没有,则访问 argv[1] 将导致未定义的行为。

一些工作代码:

#include <string>

int main(int argc, char** argv) {
    if (argc < 2)
        abc::ascii_es();
    else if (argv[1] == std::string("es"))
        abc::ascii_es();        
    else if (argv[1] == std::string("all"))
        abc::ascii_all();
    else
        abc::ascii_es();
    return 0;
}

关于c++ - 将值传递给 main(int, char**),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25877743/

相关文章:

c - gcc 是否在编译时重新排序局部变量?

c++ - 这两种说法的区别? - C++

c++ - 我可以在进入 gpu 之前从视频游戏中记录图形数据吗?

windows - 如果我已经安装了 Microsoft VC++ 2017 运行时,是否还需要安装 Microsoft VC++ 2015 运行时可再发行组件?

c++ - 数据数组返回问题,覆盖

c++ - 如何从我的 Mac 上的终端窗口运行 g++

c++ - 在可变参数模板中传递参数组

c++ - 如何通过指针获取构造函数内部函数返回值的地址

c++ - win 7可以设置单步陷阱吗?

Ruby 1.8.6 `gem install` 段错误与 "abort trap 6"