无法在VC++中使用std :: cout打印出argv []值

Chi*_*kar 1 cout argv visual-c++

这是我在网站上的第一个问题,尽管我已经来这里参考了很长一段时间.我知道argv [0]存储程序的名称,其余的命令行争论存储在剩余的argv [k]槽中.我也理解std :: cout将字符指针视为空终止字符串并将字符串输出.以下是我的计划.

#include "stdafx.h"
#include <fstream>
#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{

    cout << argv[0] << " ";
    cout << argv[1] ;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

根据我在网络搜索中看到的所有其他程序,该程序应该打印两个字符串即.程序名称和命令行争论.控制台窗口显示

0010418c 001048d6

我相信这些是指向argv [0]和argv [1]的指针.我唯一的命令行争论是"nanddumpgood.bin",它在argv [1]中并且如果我在调试时鼠标悬停在argv []数组上则正确显示字符串.

这发生了吗?我究竟做错了什么?我明白,在特殊情况下,数组会衰减到指针吗?这是不是吗?

Ben*_*igt 5

我也明白,std::cout将字符指针视为空终止字符串并将字符串输出.

大多是正确的.它适用于char*但不适用于其他类型的角色.这正是问题所在.你有一个_TCHAR*,它是char*ANSI构建但不是Unicode构建,所以你得到了默认的指针行为,而不是获得特殊的字符串行为.

我明白,在特殊情况下,数组会衰减到指针吗?这是不是吗?

argv是一个数组,但既不是数组argv[0]也不argv[1]是数组,它们都是指针.腐烂不是这里的一个因素.

最简单的解决方法是使用,int main(int argc, char* argv[])以便为命令行参数获取非Unicode字符串.我推荐这个,而不是切换到wcout,因为它与你在互联网上找到的其他代码更加兼容.