Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C getopt,strdup函数代码_C - Fatal编程技术网

C getopt,strdup函数代码

C getopt,strdup函数代码,c,C,我对getopt函数非常陌生,从未使用过它。(ac为argc,av为argv) 那么,这个代码是如何运行的呢?我感到困惑的是“r:u…”这个词是如何运作的 另外,strdup和strtoul在这段代码中做了什么 谢谢 r:u:这些字母表示一个可以在命令行中指定的标志,其中:表示需要额外的参数 strdup生成字符串的副本 strtoul将字符串转换为无符号长字符串 冒号(:)表示选项(单个字母)后面必须跟一个参数。此参数将存储在“optarg”中 有关更多信息,请查看此处: 是一个POSIX便利

我对getopt函数非常陌生,从未使用过它。(ac为argc,av为argv)

那么,这个代码是如何运行的呢?我感到困惑的是“r:u…”这个词是如何运作的


另外,strdup和strtoul在这段代码中做了什么

谢谢

  • r:u:这些字母表示一个可以在命令行中指定的标志,其中:表示需要额外的参数
  • strdup生成字符串的副本
  • strtoul将字符串转换为无符号长字符串
  • 冒号(
    )表示选项(单个字母)后面必须跟一个参数。此参数将存储在“optarg”中

    有关更多信息,请查看此处:

    是一个POSIX便利函数,用于分配缓冲区并将源字符数组复制到目标

    是一个函数,用于解析字符串中的无符号整数,并将其作为无符号long返回。

    在将其发布到StackOverflow之前,您应该先执行此操作。也就是说,有一个描述
    optstring
    参数的

    optstring是包含合法选项字符的字符串。如果此类字符后面跟一个冒号,则该选项需要一个参数,因此getopt()会在同一argv元素中放置一个指向以下文本的指针,或者在optarg中放置指向以下argv元素的文本的指针。两个冒号表示一个选项包含一个可选参数;如果当前argv元素中有文本(即,与选项名称本身相同的单词,例如“-oarg”),则返回optarg,否则optarg设置为零。这是一个GNU扩展。如果optstring包含W后跟分号,则-wfoo被视为long选项--foo。(POSIX.2为实现扩展保留了-W选项。)此行为是GNU扩展,在GLIBC2之前的库中不可用


    strdup
    是一个标准的C库函数,用于将字符串复制到新分配的缓冲区(这样您就不会弄乱其他人的副本),并且
    strtul
    将字符串转换为无符号长字符串。

    “strdup和strtul在这段代码中做什么?”您是否阅读了文档以了解这些函数的作用?您是否阅读了文档?这里已经解释清楚了。
      while ((c = getopt(ac, av, "r:u:p:h:P:s:S:t:iRbo:n:")) != EOF)
            {
                switch(c)
                    {
                    case 'b':
                        isbsd++;
                        break;
                    case 'R':
                        detectos++;
                        break;
                    case 'r':
                        root = strdup(optarg);
                        break;
                    case 'i':
                        is_scramble = 1;
                        break;
                    case 's':
                        saddr = strtoul(optarg, 0, 0);
                        break;
                    case 't':
                        timeout = strtoul(optarg, 0, 0);
                        break;
                    case 'S':
                        size = strtoul(optarg, 0, 0);
                        break;
                    case 'u':
                        user = strdup(optarg);
                        break;
                    case 'p':
                        pass = strdup(optarg);
                        break;
                    case 'h':
                        host = strdup(optarg);
                        break;
                    case 'P':
                        port = strtoul(optarg, 0, 0);
                        break;
                    case 'o':
                        heapbase = strtoul(optarg, 0, 0);
                        break;
                    case 'n':
                        scnum = strtoul(optarg, 0, 0);
                        break;
                    default:
                        usage(av[0]);
                    }
            }