为什么 argv[1][0] 不是 '?' for 'a.out ?' 在 bash shell 中执行
Why is argv[1][0] not '?' for 'a.out ?' executed in a bash shell
为什么下面的?不显示帮助?换句话说,为什么 argv[1][0]
不是 '?'什么时候“a.out?”进入了吗?
文件pricePerGrmThc-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
输出
<h>
Usage: ./a.out <THC 0x0p+0ge> <GMs> <$s> [<TCH 0x0p+0ge> <GMs> <$s> [<TCH 0x0p+0ge> <GMs> <$s> ...
执行 2
./a.out ?
输出
<1>**
must input 3n vars
执行 3
./a.out ?est
输出
<?>
Usage: ./a.out <THC 0x0p+0ge> <GMs> <$s> [<TCH 0x0p+0ge> <GMs> <$s> [<TCH 0x0p+0ge> <GMs> <$s> ...
您的 shell 将 ?
替换为当前目录中 one-character 长的文件名列表。
$ ls -1
a
b
c
def
$ ls -1 ?
a
b
c
$ echo ?
a b c
$ echo ?ef
def
您需要使用某种形式的转义或引用。
$ echo \?
?
$ echo '?'
?
?
作为命令行参数,如果当前目录中有名称由单个字符组成的文件,则可以扩展。
另请注意,%-age
应写成 %%-age
或 percentage
以避免编译器警告和 运行 时的未定义行为。
%-a
需要一个 double
参数(未提供)并将其转换为 hex-float 格式,左对齐其自身宽度,如输出所示:0x0p+0
为什么下面的?不显示帮助?换句话说,为什么 argv[1][0]
不是 '?'什么时候“a.out?”进入了吗?
文件pricePerGrmThc-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
输出
<h>
Usage: ./a.out <THC 0x0p+0ge> <GMs> <$s> [<TCH 0x0p+0ge> <GMs> <$s> [<TCH 0x0p+0ge> <GMs> <$s> ...
执行 2
./a.out ?
输出
<1>**
must input 3n vars
执行 3
./a.out ?est
输出
<?>
Usage: ./a.out <THC 0x0p+0ge> <GMs> <$s> [<TCH 0x0p+0ge> <GMs> <$s> [<TCH 0x0p+0ge> <GMs> <$s> ...
您的 shell 将 ?
替换为当前目录中 one-character 长的文件名列表。
$ ls -1
a
b
c
def
$ ls -1 ?
a
b
c
$ echo ?
a b c
$ echo ?ef
def
您需要使用某种形式的转义或引用。
$ echo \?
?
$ echo '?'
?
?
作为命令行参数,如果当前目录中有名称由单个字符组成的文件,则可以扩展。
另请注意,%-age
应写成 %%-age
或 percentage
以避免编译器警告和 运行 时的未定义行为。
%-a
需要一个 double
参数(未提供)并将其转换为 hex-float 格式,左对齐其自身宽度,如输出所示:0x0p+0