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;i cout区别在于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]
> _