在使用Visual Studio 2008编写的简单C++应用程序中处理命令行参数时遇到问题.我编写了以下代码:
#include <iostream>
using namespace std;
int _tmain(int argc, char **argv)
{
char* c = *argv;
for(int i=0; i< argc ; ++i)
{
cout << argv[i] << endl;
}
int a;
cin >> a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是只写入每个命令行参数的第一个字符cout.
我确定原因是命令行参数中的字符表示为2个字节,使得每隔一个字节char只包含0个字,即'\ 0'.
我的问题是,为什么会这样?从我在网上的样本中找到它应该工作,因为我写了它.另外,有没有办法强制参数中的字符为1字节表示?
我希望我的问题很清楚.
您_tmain正在接收UTF-16字符,当输入拉丁文本时,每隔一个字节都有一个0.您将它们解释为单字节字符.您需要将它们解释为宽字符.
我会写这样的东西:
#include <iostream>
using namespace std;
int wmain(int argc, wchar_t* argv[])
{
for(int i=0; i<argc; ++i)
{
wcout << argv[i] << endl;
}
int a;
wcin >> a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果你不想使用UTF-16那么你可以坚持char这样:
int main(int argc, char* argv[])
{
for(int i=0; i<argc; ++i)
{
cout << argv[i] << endl;
}
int a;
cin >> a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
请注意main函数命名的更改.在MS世界中,wmain接收wchar_t*和main接收char*.
如果切换到char*那时,您还应该将项目配置更新为目标MBCS而不是Unicode.
有关MS编译器主要功能处理的更多信息,请参见:main:程序启动.