在vc下打印参数串

如果是标准的C++代码、直接以下代码便可以把所有的参数输出了

#include <windows.h>

int main(int argc, char* argv[])
{
        for(int index = 0; index < argc; index++)
    {
        printf("%s\n", argv[index]);
    }
        return 0;
}

比如程序名是test.exe、运行命令了test.exe test

那么argv[0]就是test.exe、argv[1]便是test

 

但是在一个标准的VC控制台程序里、入口函数是_tmain而不是main、这就意味着有可能是unicode的编码也有可能是ascii编码的、如果新建一个VC项目也输入以上的命令、结果会大有不同

// test_argv.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
    for(int index = 0; index < argc; index++)
    {
        printf("%s\n", argv[index]);
    }
    return 0;
}

这里返回的argv[0]是t、返回的argv[1]也是t、所以只返回了参数字符的首字符、这里莪们改一下、把printf中的%s换成大写的%S、那么结果又会再次正常了

// test_argv.cpp : 定义控制台应用程序的入口点。
//

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


int _tmain(int argc, _TCHAR* argv[])
{
    for(int index = 0; index < argc; index++)
    {
        printf("%S\n", argv[index]);
    }
    return 0;
}

根据MSDN的官方解释、当函数是printf时、%s输出的是单字符、%S输出的则是宽字符串、这样便恍然大悟了、这里因为windows下的_tmain接收的参数是宽字符串_TCHAR *而不是标准ASCII下的char *、所以当使用和标准C相同的代码时便会发生了不预期的想法、

 

当然也可以使用标准C++的cout方法输出

// test_argv.cpp : 定义控制台应用程序的入口点。
//

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


int _tmain(int argc, _TCHAR* argv[])
{
    for(int index = 0; index < argc; index++)
    {
        std::wcout << argv[index] << std::endl;
    }
    return 0;
}

这里使用的是wcout方法而不是cout、不然输出的只会是个指针地址、

 

参考文章:

http://msdn.microsoft.com/en-us/library/hf4y5e3w

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值