簡體   English   中英

從Unix命令行運行時,getopt無法正常工作

[英]getopt not working correctly when run from unix command line

我編寫了一個C程序(從Google復制並粘貼,並進行了簡化),以使用getopt打印從Unix命令行傳入的參數值。

從Unix命令行:

./myprog -a 0 -b 1 -c 2

我的C代碼是:

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

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

    while ((i = getopt(argc, argv, "abc")) != -1) {
        switch (i) {
            case 'a': 
               printf("A = %s\n", optarg);
               break;

            case 'b': 
               printf("B = %s\n", optarg);
               break;

            case 'c': 
               printf("C = %s\n", optarg);
               break;

            default:
                break;
        }
    }

    return 0;
}    

我想編程打印出每個傳遞的值,例如

A = 0
B = 1
C = 2

但是,它根本不打印任何內容。

在帶參數的任何選項之后,您都會忘記“:”。 如果您要換一行

while ((i = getopt(argc, argv, "a:b:c:")) != -1) {

您將獲得工作變體。

正確閱讀man 3 getopt ,它說到關於getopt第三個論點

…optstring是包含合法選項字符的字符串。 如果此類字符后接冒號,則該選項需要一個參數,因此getopt()將指針指向位於同一argv-element中的后續文本,或位於optarg中的后續argv-element的文本。 兩個冒號表示一個選項帶有一個可選的arg; 如果當前argv元素中有文本(即,與選項名稱本身相同的詞,例如“ -oarg”),則將它以optarg返回,否則optarg設置為零。 ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM