数组访问参数[0] [1] - ' 0'

时间:2018-03-29 17:34:22

标签: c arrays linux

我现在已经搜索了很多这方面的内容,但我没有取得任何成功,所以我想我会问这里。基本上,我正在尝试理解用于在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 ;;

2 个答案:

答案 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的值为2z的值为6

该逻辑取决于保证用于字符'0' - '9'的编码必须是连续的。

答案 1 :(得分:1)

可能args是对

的引用
int main(int argc, char **argv);

然后args[0]是程序的名称,在下面的args中,您可以找到程序的参数,例如, Arguments to main in C

因此args[0[0]是该程序名称的第一个字符。