C++,命令行args没有被正确解析

jbu*_*jbu 9 c++ parsing command-line-arguments

我有一个程序:

int _tmain(int argc, char* argv[])
{
   std::cout << "STARTING" << std::endl;
   std::cout << "Num inputs: " << argc << std::endl;

   for(int i = 0; i < argc; i++)
      std::cout << argv[i] << std::endl;
Run Code Online (Sandbox Code Playgroud)

我希望打印出所有命令行参数.但是,输出是这样的:

./Test.exe你好世界

START Num输入:3.HW

它似乎只是查看每个参数中的第一个字符,而不是整个字符*直到终止字符.

有人有什么想法?

附加说明:通过VS2008创建它,我本质上是在互联网上复制和粘贴一个应该工作的例子.我用bash,powershell和cmd运行程序.

Dar*_*con 17

您的Visual C++项目设置为Unicode,您的主要功能称为_tmain.这意味着Windows会调用您的函数并传递Unicode字符串,但您可以使用char*类型将它们视为ANSI字符串.由于第一个Unicode字符的第二个字节为null,因此它显示为带有一个字符的ANSI字符串.

  • @jbu - 如果您要使用_tmain,请遵循_tmain的签名.否则坚持使用标准程序入口点:main. (2认同)

det*_*zed 5

很可能它是用UNICODE设置编译的.你应该使用wcout而不是coutif UNICODE定义.并且所有字符串都应放在里面_T().

#ifdef UNICODE
#define tout wcout
#else
#define tout cout
#endif 

int _tmain(int argc, TCHAR* argv[])
{
   std::tout << _T("STARTING") << std::endl;
   std::tout << _T("Num inputs: ") << argc << std::endl;

   for(int i = 0; i < argc; i++)
       std::tout << argv[i] << std::endl;
Run Code Online (Sandbox Code Playgroud)


In *_*ico 3

您是否在 Unicode 模式下编译代码?