我有一个程序:
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;
我希望打印出所有命令行参数。但是,输出是这样的:
./ Test.exe hello world
STARTING Num输入:3 。 H 瓦特
看起来它只是查看每个参数中的第一个字符而不是整个字符*直到终止字符。
有人有任何想法吗?
附加说明:通过VS2008创建它,我基本上是在互联网上复制和粘贴一个应该有效的示例。我用bash,powershell和cmd运行程序。
答案 0 :(得分:17)
您的Visual C ++项目设置为Unicode,您的主要功能称为_tmain。这意味着Windows会调用您的函数并传递Unicode字符串,但您可以使用char *类型将它们视为ANSI字符串。由于第一个Unicode字符的第二个字节为null,因此它显示为带有一个字符的ANSI字符串。
答案 1 :(得分:5)
最有可能是使用UNICODE
设置进行编译。如果定义了wcout
,您应该使用cout
而不是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;
答案 2 :(得分:4)
第一个炭?闻起来像Unicode被解释为ANSI。这说得通。如果你使用_tmain,那么你必须使用TCHAR。
答案 3 :(得分:3)
您是否在Unicode模式下编译代码?