c - getopt 不适用于我的参数之一

标签 c getopt

我必须编写 TCP/UDP 服务器/客户端软件。

可能的参数:-u: UDP -t: TCP -l 服务器 -p: [端口] -h [IP]

我写了一个函数 printflags,看看是否一切正常。 u-、t-、l- 和 p-选项工作正常。但是我的 IP 每次都是 NULL。 问题出在哪里?

#include <ctype.h>
#include <stdio.h>
#include <getopt.h>
#include <stdlib.h>
#include <unistd.h>

int printflags(int, int, int, char *,char *); 

int main(int argc, char *argv[]){

    int uflag=0;
    int tflag=0;
    int lflag=0;
    char *pvalue = NULL;
    char *hvalue = NULL;
    int c;

    opterr = 0;

    while((c = getopt (argc, argv, "utlhp:")) != -1)
    {
        switch(c)
        {
        case 'u':
            uflag = 1;
            break;
        case 't':
            tflag = 1;
            break;
        case 'l':
            lflag = 1;
            break;
        case 'p':
            pvalue = optarg;
            break;
        case 'h':
            hvalue = optarg;
            break;
        case ':':
            fprintf(stderr, "case :");
        case '?':
            if(optopt == 'p' || optopt == 'h')
                fprintf(stderr, "Option '-%c' requires an argument.\n", optopt);
            else if (isprint(optopt))
                fprintf(stderr, "Unknown option character '-%c'.\n", optopt);
            else
                fprintf(stderr, "Unknown option character '%x'.\n", optopt);
            return 1;
        default:
             abort(); 
        }
     }
     printflags(uflag, tflag, lflag, pvalue, hvalue);
     return 0;
 }

int printflags(int uflag, int tflag, int lflag, char* pv, char *hv){
    printf("-u UDP: %d\n", uflag);
    printf("-t TCP: %d\n", tflag);
    printf("-l Listen Socket - Server: %d\n", lflag);   
     printf("-p Port: %s\n", pv);
     printf("-h IP: %s\n", hv);
     return 0;
}

最佳答案

您的选项字符串应该是 "utlh:p:"。每个带有 optarg 的字母后都需要一个冒号。

关于c - getopt 不适用于我的参数之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27622670/

相关文章:

c - 确定什么 secret 握手导致他们只打印给定的行一次

bash - 将多个参数传递给 shell 脚本并解析它们

c - 在 OS X Mavericks 上使用 -O3 编译时出现 Getopt 代码段错误

c - 使用 getopt 获取非指定参数 C

linux - getopt_long 与 getopt_long_only

c - 两个线程——从 STDIN 读取文本并通过管道发送

C: 为什么我会收到编译错误“"dereferencing pointer to incomplete type ‘struct xy’”?

Perl Getopt 多次使用相同的选项

c - l2cap 服务器/客户端使用 IOBluetooth(osx 蓝牙堆栈)

c - 如何用机器语言调用printf