C++ 中客户端程序的可选命令行参数

optional command line arguments for client program in c++

本文关键字:命令行 参数 客户端 程序 C++      更新时间:2023-10-16

我必须修改这段需要 2 个命令行参数的代码

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

以任意顺序具有 3 个可选的命令行参数(用户名、服务器主机编号、服务器端口编号)。我这样写,但它不起作用。有人可以帮我弄清楚该怎么做吗。谢谢

  if (argc<1 || argc>4)
    fprintf(stderr, "usage error: incorrect number of argumentsn");
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 usernamen", 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 ''
strncpy(username, argv[i + 1], NAME_LEN);