簡體   English   中英

C ++中客戶端程序的可選命令行參數

[英]optional command line arguments for client program in c++

我必須修改此代碼,需要2個命令行參數

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

以任意順序具有3個可選的命令行參數(用戶名,服務器主機號,服務器端口號)。我以這種方式編寫,但無法正常工作。請有人幫我弄清楚該怎么做。謝謝

  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]);

使用getopt ,它專門用於以一致的方式處理命令行參數,這是很難正確完成的。

您應該增加索引以繞過選項獲得參數的值。 例如,像這樣修改您的代碼。

   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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM