2013-01-23 34 views
0

我不得不修改此代码这就需要2命令行参数可选的命令行参数的客户端程序++

if (argc == 3){ 
    host = argv[1]; 
    port = atoi(argv[2]); 
     else { 
    fprintf(stderr, "usage error: incorrect number of arguments\n"); 

具有以任何顺序3可选命令行参数(用户名,服务器主机num,则服务器端口NUM)。我写这样,但它不会work.could有人请帮我弄清楚如何do.thanks

if (argc<1 || argc>4) 
    fprintf(stderr, "usage error: incorrect number of arguments\n"); 
else 
    for(int i=1;i<=argc;i++) 
    { 
     if (strcmp(argv[i],"-u"==0) 
      username=argv[i]; 
     if(strcmp(argv[i],"-p"==0) 
      port=atoi(argv[i]); 
     if (strcmp(avrgv[i],"-h"==0) 
      host=(argv[i]); 
+1

可能是一个') '围绕你的'strcmp(argv [i],“..”== 0)'行... – Yuushi

回答

2

使用getopt,它是在处理命令行参数的专用一致的方式,这是一个臭名昭着的难以纠正的问题TLY。

0

您应该增加索引以绕过选项获取参数的值。例如像这样修改你的代码。

if (argc<1 || argc>4) 
     fprintf(stderr, "usage: %s -u username\n", argv[0]); 
    else 
     for(int i=1;i<=argc;i += 2) 
     { 
      if (strcmp(argv[i],"-u")==0) 
       username=argv[i + 1]; 

而且你最好定义username作为char阵列和参数的值复制到它,这样你就可以直接修改它,就像这样:因为你缺少

char username[NAME_LEN + 1];       // +1 for tailing '\0' 
strncpy(username, argv[i + 1], NAME_LEN);