2013-01-23 35 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);