getopt不适用于我的一个参数

时间:2014-12-23 14:48:46

标签: c getopt

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

可能的参数:-u:UDP -t:TCP -l Server -p:[Port] -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;
}

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

你的getopt()参数在h之后需要一个冒号来表示-h需要一个参数。

while((c = getopt (argc, argv, "utlh:p:")) != -1)
//                                  ^ --- here