c++ - argv[1]+1 和 argv[2] 有什么区别

标签 c++

我知道这个问题很基础,我也是新手,所以请帮我解决这个问题:

我有这个代码:

int wmain(int argc, wchar_t *argv[])
{
    if (*argv[1] == L'-' && (!_wcsicmp(L"install", argv[1]+1)))
    {
        wprintf(L"You pressed: -install !");
    }
    else
    {
        wprintf(L"Unknown");
    }
}

它工作正常,但如果我替换为:

int wmain(int argc, wchar_t *argv[])
{
    if (*argv[1] == L'-' && (!_wcsicmp(L"install", argv[2])))
    {
        wprintf(L"You pressed: -install !");
    }
    else
    {
        wprintf(L"Unknown");
    }
}

运行时中断。

我不知道

  • 为什么要使用 argv[1]+1
  • argv[1]+1 和 argv[2] 有什么区别(我在上面用过)。

谁能给我解释一下,并给我关于 wchar_t 的文档???

最佳答案

首先, 为什么要使用 argv[1]+1: --> _wcsicmp 需要 POINTER,所以你需要传递:argv[1] + 1 或 argv[2]

其次, argv[1]+1 和 argv[2] 有什么区别(我在上面用过)。 : --> 你看到 wmain 的第二个参数了吗:wchar_t *argv[]? - 这意味着 POINTER 到 ARRAY(相同的 POINTER 到 POINTER)。

每个参数用空格隔开。 因此,argv[1] 是指向第二个参数的指针,argv[2] 是指向第三个参数的指针。 并且,argv[1]+1 将指针中的地址增加 1(意味着该指针将指向第二个参数字符串中的第二个字符)

关于c++ - argv[1]+1 和 argv[2] 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20040227/

相关文章:

c++ - 为什么它不会移动?

c++ - 如何拆分大 switch 语句

可变模板参数 : why isn't this working 上的 C++11 初始化程序列表

c++ - 用于蒙特卡洛模拟的 vector 优化累积

c++ - 多个 Dll 通过 "main"dll 相互调用函数

C++ for循环输出一个数组与多个数组不同的结果

c++ - 在 Qt 拖放中使用 QMimeData 传递数据

c++ - {fmt}在字符串中仅替换一个位置参数几个位置参数

c# - C#中的隐式类型转换

c++ - 在花括号内添加语句会改变代码功能吗?