首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

VC2005和vc6命令行参数的传递不同?该怎么解决

2012-03-18 
VC2005和vc6命令行参数的传递不同?vc2005:#includestdafx.h #include iostreamusingnamespacestdint_

VC2005和vc6命令行参数的传递不同?
vc2005:
#include   "stdafx.h "
#include <iostream>
using   namespace   std;

int   _tmain(int   argc,   _TCHAR*   argv[])
{
if(argc <2){
cout < < "error! " < <endl;
}else{
for(int   i=1;   i!=argc;   ++i)
{
cout < < "hello,   " < <argv[i] < <endl;
}
}
getchar();
return   0;
}
=======================================================
vc6:
#include <iostream>
using   namespace   std;

int   main(int   argc,   char*   argv[])
{
if(argc <2){
cout < < "error! " < <endl;
}else{
for(int   i=1;   i!=argc;   ++i)
{
cout < < "hello,   " < <argv[i] < <endl;
}
}
getchar();
return   0;
}
在两个编译器里main的两个参数一样的吧`?可是在vc6编译的能正确接收传递的命令行参数并显示,vc2005的不行,显示的是十六进制的东西,为什么

[解决办法]
宽字符串了吧,你的vs2005可能定义了UNICODE宏
wcout < < argv[i] < <endl;
[解决办法]
cout < < "hello, " < <argv[i] < <endl;

你看下 argv 的类型是什么?_TCHAR* argv[]
所以argv[i]的类型是_TCHAR*,不是char*。
cout只能正确输出char*,对于宽字符串不能处理。你试下wcout行不行。

另外你对宽字符有误解。宽字符可以用两个字符存储一个普通的char,即使你输入 "huang ",每个字符也用两个字节存储。

热点排行