2010-07-28 59 views
0

我在VS2005中运行C++程序,在项目属性 - >调试 - >命令行参数中只设置了一个参数,例如命名为profile1.dll在Visual Studio C++中读取程序参数的问题

这里的代码片断

cout<<"number of arguments:" << argc<<endl; 

for (int i=0; i<argc; i++) 
     cout << "argument " << i << ": " << argv[i] << endl; 

在输出我得到

number of arguments:2 
argument 0: c 
argument 1: p 

不知道为什么它不打印参数的名称?

+1

我的猜测是你的主要方法有argv有char *类型而不是char **。不知道你的主要方法decl肯定不知道。 – 2010-07-28 11:39:24

+0

我认为鲍勃的答案是唯一的答案。您正在使用UNICODE,0会阻止您打印整个字符串。使用UNICODE的函数来打印字符串。 – 2010-07-28 11:54:42

回答

5

你的exe的名字是以C开头的吗?如果你期望一个字符串,并且你只能得到一个字符,通常是因为你已经发现UTF-16 Unicode的西方字母有效地在交替的ANSI字符之间放置一个0。你在编译Unicode吗?

+0

我正在使用Unicode。 我将其更改为多字节,但输出仍然相同 – 2010-07-28 11:45:13

+0

@Kobac:使用Unicode时,应使用std :: wcout而不是std :: cout。 – Sjoerd 2010-07-28 11:52:19

+0

+1 - 赶上! – 2010-07-28 13:07:50

0

你可以把你的main功能的原型?你在做什么显然很好。

确保你的主要的函数原型为类似于:

int main(int argc, char **argv) 

希望它能帮助。

+0

'int _tmain(int argc,char * argv [])// _ TCHAR *' 所以默认它是_TCHAR *为argv [],但如果是这样,它打印一个整数,所以我将它改为char * – 2010-07-28 11:41:17

+1

@Kobac:将其更改回TCHAR,并使用std :: wcout而不是std :: cout – Sjoerd 2010-07-28 11:53:16

+0

现在我看到发生了什么。您正在使用UNICODE和0阻止您打印整个字符串。检查鲍勃的答案。 – 2010-07-28 11:53:17

3

argv[0]是您程序的名称。 argv[1]是第一个参数。这听起来像你宣布在main()中的相关参数为char* argv而不是char *argv[]char **argv

+0

但是,OP已经在回应巴勃罗的回答时说过,他已经宣布它为char * argv []。有些事情不对。 – 2010-07-28 11:58:09

+1

@kobac:谢谢你接受我的回答,但正如指出的那样,这不是你问题的原因。你能接受@Bob Moore的回答吗? – Vicky 2010-07-28 12:44:35

+0

年的fairplay! :) – 2010-07-28 13:48:41

1

离开TCHAR吧,没关系。

如果你使用Unicode编译,使用wcout输出:

int _tmain(int argc, _TCHAR* argv[]) 
{ 

    for (int i=0; i<argc; i++) 
    wcout << "argument " << i << ": " << argv[i] << endl; 

    return 0; 
} 

否则编译不Unicode和您的代码将只是工作原样(并且将不使用Unicode参数工作:O)

你可以在“项目属性/常规/字符集”中找到设置