【问题标题】:Passing values to main(int, char**)将值传递给 main(int, char**)
【发布时间】:2014-09-16 20:20:48
【问题描述】:

我有一个显示 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 方法。 我做错了什么?

【问题讨论】:

  • argv[0] 是程序本身的路径。你可能应该使用strncmp 而不是==
  • strcmp 可能比strncmp 更好

标签: c++ visual-c++ gcc


【解决方案1】:

问题:

  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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2020-07-24
    • 2019-12-11
    • 1970-01-01
    • 2020-11-03
    相关资源
    最近更新 更多