我现在已经搜索了很多这方面的内容,但我没有取得任何成功,所以我想我会问这里。基本上,我正在尝试理解用于在linux中创建shell的C编写程序,我遇到了这段代码的问题
...
else if (args[0][0]-'!'==0){
int x = args[0][1]-'0';
int z = args[0][2]-'0';
...
}
args
正在存储用户输入的命令。例如,稍后使用对execvp(args[0], args)
的调用替换子进程的地址空间(父进程读取命令,子进程执行它们)。 args的定义如下:char *args[MAX_LINE/2 +1];
我一直无法理解的是访问数组的方式;特别是这些表达式在这种情况下的含义: ARGS [0] [0] - '!' == 0 ARGS [0] [1] - ' 0&#39 ;; ARGS [0] [2] - ' 0&#39 ;;
答案 0 :(得分:4)
根据变量的名称判断,args
代表一个列表/参数数组。
arg[0]
是该数组的第一个元素
args[0][0]
是该数组第一个元素的第一个字符。
表达式args[0][0]-'!'==0
检查该字符是否等于'!'
。这可以写得更好args[0][0] == '!'
。
这好像不是使用if ( i == 10 )
,而是决定使用if (i-10 == 0)
。
接下来的两行
int x = args[0][1]-'0';
int z = args[0][2]-'0';
期望第一个参数的第二个和第三个字符是数字,并提取它们对应的十进制值。如果第一个参数为"!26"
,则x
的值为2
,z
的值为6
。
该逻辑取决于保证用于字符'0'
- '9'
的编码必须是连续的。
答案 1 :(得分:1)
可能args
是对
int main(int argc, char **argv);
然后args[0]
是程序的名称,在下面的args
中,您可以找到程序的参数,例如, Arguments to main in C
因此args[0[0]
是该程序名称的第一个字符。