C++ 在win32控制台应用程序中打印参数

C++ 在win32控制台应用程序中打印参数,c++,visual-c++,C++,Visual C++,这是我的密码: int _tmain(int argc, _TCHAR* argv[]) { for (int i = 1;i<argc;i++) printf("Argument %d:%s\n",i,argv[i]); // output = Argument 1:param for (int k = 1; k < argc; k++) cout << "Argument " << k << ": " <&

这是我的密码:

int _tmain(int argc, _TCHAR* argv[])
{   
    for (int i = 1;i<argc;i++) printf("Argument %d:%s\n",i,argv[i]);
    // output = Argument 1:param

    for (int k = 1; k < argc; k++) cout << "Argument " << k << ": " << argv[k];
    // output =  Argument 1: 00BF5878
    return(0);
}
int-tmain(int-argc,_-TCHAR*argv[]
{   

对于(int i=1;i您在
cout
的输出中看到一个地址,因为您使用
UNICODE
\u UNICODE
定义了程序。可能是通过Visual Studio项目中的设置。然后
\u tmain
扩展到MIcrosoft的非标准
wmain
,而
\u TCHAR
扩展到
wchar\u t

而且
cout
不知道指向
wchar\u t
的指针应该如何指向以空结尾的宽字符字符串

我不知道为什么这不会发生在
printf
上。让我检查一下


好的,我已经检查过了,您的
printf
没有按照您的指示打印“param”

下面是我检查过的正确代码:

#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;
    }
}
#包括
#包括
#包括
使用名称空间std;
int _tmain(int argc,_TCHAR*argv[]
{
对于(int i=0;icout区别在于
printf
获取参数的内容并强制数据与格式说明符匹配。
argv[i]
的内容将被视为以nul结尾的字符串,因为
%s
格式说明符


cout
和流插入操作符将根据参数的类型输出。编译器将搜索所有的
操作符如果这是他的问题,
printf
将中断,因为他将尝试通过
printf
将wchar\t字符串打印为
char
字符串。有一个_TCHAR*argv[]出现问题。将其更改为const char*,现在无法正常运行。我没有说它打印“param”。我使用单词param作为全局参数输入。如果我使用“-v”运行程序,它将打印“-v”这部分是预期的。他的报告是准确的。他可能没有编译<代码> /dUIUDOO< /COD>。无论如何……你是对的。我应该切换到C++标准,而不使用微软的突变。 [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] > _