您在cout
的输出中看到一个地址,因为您已经构建了定义了UNICODE
或_UNICODE
的程序。可能通过Visual Studio项目中的设置。然后_tmain
扩展到MIcrosoft的非标准wmain
,并且_TCHAR
扩展到wchar_t
。
而cout
不知道指向wchar_t
的指针应该如何指向以空字符结尾的宽字符串。
我不知道为什么printf
不会发生这种情况。勒姆检查。
OK我已经检查过你的printf
是不印刷“参数”为你指明它。
下面是更正后的代码我检查:
#include <iostream>
#include <stdio.h>
#include <tchar.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
for(int i = 0;i < argc; ++i)
{
printf("printf Argument %d:%s\n",i,argv[i]);
}
for(int i = 0; i < argc; ++i)
{
cout << "cout Argument " << i << ": " << argv[i] << endl;
}
}
而这里的结果:
[D:\dev\test]
> cl foo.cpp /D _UNICODE
foo.cpp
[D:\dev\test]
> foo param
printf Argument 0:f
printf Argument 1:p
cout Argument 0: 004F9A9C
cout Argument 1: 004F9AA4
[D:\dev\test]
> _
换句话说,表观难题完全是由你的结果的报告不准确造成的。
解决方案:而不是使用微软的非标准wmain
,尤其是而不是使用现在完全没有意义的Windows 9x中支持宏!使用标准C++ main
。
如果这是他的问题,那么'printf'会中断,因为他会尝试通过'printf'打印一个wchar_t字符串作为'char'字符串。 –
_TCHAR * argv []存在问题。将其更改为const char *,现在它正常结束。 – pbibergal
我没有说它打印“参数”。我用word param作为我输入的全局参数。如果我用“-v”运行程序,它会打印“-v”。所以这部分按预期工作。 – pbibergal