C while 循环调用++ 当它是一个 char

标签 c while-loop increment

我找到了这个函数,但我不明白它的某些部分。我有大约 3 天的 C 经验,所以请耐心等待。此函数用于解析命令行参数。

  1. 为什么他们将 *arg 重新分配给 *c

  2. 我不明白他们为什么要运行 while 循环。

  3. 其次,为什么他们会对 char 指针运行 while 循环?我知道 char 实际上是一个字符数组,但我的理解是他们只会对 char 运行 while 循环来单独访问数组字符值,而他们不会执行任何操作。

  4. 如何对字符递增?

  5. 为什么我们还要有 *c?

  6. 我添加了字符串检查以查看 arg 是否为 -styles 例如,它有一个 - 这样我就可以解析标志并获取值,它是 argv 中的下一个 arg - 是否正确使用?

就像我说的,我有大约 3 天的 C 经验,所以请尽可能彻底和有条不紊地提供帮助,以帮助我更好地理解这个函数和 C 的整体。

void print_args(int argc,char *argv[])
{
     int i;
     if(argc > 1){
       for(i=1;i<argc;i++){
           char *arg = argv[i];
           char *c = arg;
           while(*c){
             if(strchr("-", *c)){
                 printf("arg %d: %s -> %s\n",i,arg,argv[i+1]);
             }  
             c++;
         }
       }
     }
 }

最佳答案

1)arg赋值指向当前char数组的头部,c用于遍历数组。

2,3,5) while 循环一直运行到 c 指向 (char)0,顺便说一句,它也是 \0 .所以实际上它们遍历了 char 数组中的每个字符,直到它们到达空终止符。更好的条件是 while (*c != '\0'),而不是隐含地依赖 '\0' == 0

4) 它们递增一个指针,从而使其指向下一个存储单元,即下一个数组单元。

6) 您的添加将作为识别选项的测试,您仍然需要将它与 -styles 进行比较,以查看它确实是一个有效的选项。

此代码示例可以进行大量修复以使其更健壮和更清晰。 如果这是来自书籍或 C 教程,我建议您寻找另一本。

关于C while 循环调用++ 当它是一个 char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13546866/

相关文章:

Python-在脚本后台运行 while 循环

linux - Bash 非常慢

svn - 一个 SVN 存储库中的不同修订增量

php - 我需要从 PHP 脚本执行 C 程序

c - 如何将简单的 opengl 线图代码转换为使用顶点数组

c - 取消引用指向链表上不完整类型的指针

c - 如何在C中获取静态数组的地址

C++循环,输入的最大/最小数字

Javascript,在按钮点击时增加一个计数器

python - 我怎样才能增加一个字符?