我有從我正在寫一個程序解析參數的問題,代碼如下:getopt_long問題
void parse_args(int argc, char** argv)
{
char ch;
int index = 0;
struct option options[] = {
{ "help", no_argument, NULL, 'h' },
{ "port", required_argument, NULL, 'p' },
{ "stop", no_argument, NULL, 's' },
{ 0, 0, 0, 0 }
};
while ((ch = getopt_long(argc, argv, "hp:s", options, &index)) != -1) {
switch (ch) {
case 'h':
printf("Option h, or --help.\n");
break;
case 's':
printf("Option s, or --stop.\n");
break;
case 'p':
printf("Option p, or --port.\n");
if (optarg != NULL)
printf("the port is %s\n", optarg);
break;
case '?':
printf("I don't understand this option!!!\n");
case -1:
break;
default:
printf("Help will be printed very soon -:)\n");
}
}
}
當我運行我的程序,我得到一些奇怪的輸出:
./Server -p 80
Option p, or --port.
the port is 80
./Server -po 80
Option p, or --port.
the port is o
./Server -por 80
Option p, or --port.
the port is or
./Server -hoho
Option h, or --help.
Server: invalid option -- o
I don't understand this option!!!
爲什麼它很奇怪?你期望什麼? –
最後三個執行輸出很奇怪!!! – funnyCoder
不,不是。你傳遞'-p',它將下一個事物('o'或'or')解釋爲計數,並忽略'80'。 'p'應該在'o'和'r'之後。在第四輪中,它只計算一次每個字母。 –