簡體   English   中英

為什么 argv[1][0] 不是 '?' 對於“a.out?” 在 bash shell 中執行

[英]Why is argv[1][0] not '?' for 'a.out ?' executed in a bash shell

為什么 下面不顯示幫助? 換句話說,為什么argv[1][0]不是 '?' 什么時候“a.out?” 被輸入?

文件價格PerGrmThc-v0.c

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

int main(int argc, char **argv){
**printf("<%c>\n", argv[1][0]);**
    if(argc == 1 || argv[1][0] == '?' || argv[1][0] == 'h' || argv[1][0] == 'H'){
        printf("Usage:  %s <THC %-age> <GMs> <$s> [<TCH %-age> <GMs> <$s> [<TCH %-age> <GMs> <$s> ...\n", argv[0]);
        return(1);
    }
    if(argc%3 != 1){
        printf("must input 3n vars\n");
        return(2);
    }
    for(int i = 0; i < argc/3; i++){
        printf("%2.2f $/grOfThc\n", atof(argv[i * 3 + 3])  / (atof(argv[i * 3 + 2])  * atof(argv[i * 3 + 1])));
    }
    return(0);
}

執行 1

./a.out h

Output

<h>
Usage:  ./a.out <THC 0x0p+0ge> <GMs> <$s> [<TCH 0x0p+0ge> <GMs> <$s> [<TCH 0x0p+0ge> <GMs> <$s> ...

執行 2

./a.out ?

Output

<1>**
must input 3n vars

執行 3

./a.out ?est

Output

<?>
Usage:  ./a.out <THC 0x0p+0ge> <GMs> <$s> [<TCH 0x0p+0ge> <GMs> <$s> [<TCH 0x0p+0ge> <GMs> <$s> ...

您的 shell 替換? 包含當前目錄中的一個字符長的文件名列表。

$ ls -1 
a
b
c
def

$ ls -1 ?
a
b
c

$ echo ?
a b c

$ echo ?ef
def

您需要使用某種形式的 escaping 或引用。

$ echo \?
?

$ echo '?'
?

? 如果當前目錄中有名稱由單個字符組成的文件,則可以擴展作為命令行參數。

另請注意, %-age -age 應寫成%%-agepercentage ,以避免編譯器警告和運行時的未定義行為。

%-a需要一個double參數(未提供)並將其轉換為十六進制浮點格式,左對齊其自身寬度,如 output 所示: 0x0p+0

暫無
暫無

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

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