首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

The C Programming Language有关问题

2012-02-24 
The C Programming Language问题#includestdio.h#includestring.h#defineMAXLINE1000intgetline(char*

The C Programming Language问题
#include   <stdio.h>
      #include   <string.h>
      #define   MAXLINE   1000

      int   getline(char   *line,   int   max);

      /*   find:   print   lines   that   match   pattern   from   1st   arg   */
      main(int   argc,   char   *argv[])
      {
              char   line[MAXLINE];
              long   lineno   =   0;
              int   c,   except   =   0,   number   =   0,   found   =   0;

              while   (--argc   >   0   &&   (*++argv)[0]   ==   '- ')
                      while   (c   =   *++argv[0])
                              switch   (c)   {
                              case   'x ':
                                      except   =   1;
                                      break;
                              case   'n ':
                                      number   =   1;
                                      break;
                              default:
                                      printf( "find:   illegal   option   %c\n ",   c);
                                      argc   =   0;
                                      found   =   -1;
                                      break;
                              }
              if   (argc   !=   1)
                      printf( "Usage:   find   -x   -n   pattern\n ");
              else
                      while   (getline(line,   MAXLINE)   >   0)   {
                              lineno++;


                              if   ((strstr(line,   *argv)   !=   NULL)   !=   except)   {
                                      if   (number)
                                              printf( "%ld: ",   lineno);
                                      printf( "%s ",   line);
                                      found++;
                              }
                      }
              return   found;
      }
中(*++argv)[0]和*++argv[0]各代表什么啊,不是很明白谢谢。


[解决办法]
(*++argv)[0]表示下一个参数的第一个字符即 "- "
*++argv[0]表示这个参数的第二个字符,即x或n
[解决办法]
如果是这样运行的./a.out param
则(*++argv)[0] == p, *++argv[0] == a
[解决办法]
楼上两位正解,分析一下:
如果是这样运行的:
a.out -a
则*argv == "a.out\0 " (或者是argv[0] = "a.out\0 " )
*++argv == "-a\0 " (或者是argv[1] = "-a\0 " )
(*++argv)[0],先执行++,argv是char **,也可以看成是指向一个字符串数组,它自加之后指向第2个字符串,即 "-a\0 ", 再执行[0],就是取这个字符数组的第个字符: '- '

执行完这条指令之后,argv已经指向了 "-a\0 ",再执行*++argv[0],先执行argv[0],[]的优先级比++高,就是取字符串数组的第1个字符串,就是 "-a\0 ",这时argv[0]指向的是该字符串的开头: '- ',自加之后指向下一个字符: 'a ',取它的内容就是 'a '

分析的时候注意一下指针的类型,象argv 是char**,指向的是字符串数组,(如果可以这样表达的话),而*argv,argv[0]这些都是char*型的。

热点排行