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

Posted

技术标签:

【中文标题】将值传递给 main(int, char**)【英文标题】:Passing values to 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 更好 【参考方案1】:

问题:

    您不是在比较字符串,而是在比较指针。您可以通过将其中一个参数更改为 std::string 或使用 strcmp(...) == 0 来解决此问题。 argv[0] 是您的程序的名称。第一个参数使用argv[1]。 您没有检查程序是否有参数。如果没有,那么访问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;

【讨论】:

以上是关于将值传递给 main(int, char**)的主要内容,如果未能解决你的问题,请参考以下文章

C ++将值传递给函数中的二维字符数组

MS Access 2007 - OpenArgs 没有将值传递给下一个表单?

用 int main(void) 编译失败; main(int argc, char *argv[]) 成功。为啥?

C语言中的值传参和引用传参是指啥?

戒除void main()陋习

如何将函数中使用的数组传递给动态分配的main数组?