C代码编译没有错误,但运行不正确(命令行参数和指针)

Noa*_*ren 1 c pointers command-line-arguments

#include <stdio.h>

int strcompare (char*);
int main (int argc, char *argv[])
{
    int argIndex;
for(argIndex = 1; argIndex <= argc; argIndex++)
{
    strcompare(argv[argIndex]);
    printf("%s has %d letters in it\n", argv[argIndex], strcompare(argv[argIndex]));
}
return 0;
}

int strcompare (char *str)
{
    int index, letterDex = 0;
    for (index = 0; *str != '0'; index++)
    {
        letterDex++;
    }
}
Run Code Online (Sandbox Code Playgroud)

分配是计算单词中字母的数量,当我编译时没有任何错误,但是当我尝试运行它时根本不起作用

./cma_length noah bruh conner
Run Code Online (Sandbox Code Playgroud)

当我按下Enter键之后,一切都没有了。

Alb*_*lia 5

四个问题:

  • 缺少您的退货声明 strcompare
  • 您没有更新指针 char*
  • 在具有4个元素的C数组中,索引3中的最后一个元素,因此在for循环条件下,您必须检查<,而不是<=
  • *str != '0'是错误的,您正在检查char是否为char 0,而不是转义字符,\0因此以这种方式检查此char*str != '\0'

完成这些操作后,代码将如下所示:

#include <stdio.h>
int strcompare (char*);
int main (int argc, char *argv[])
{
    int argIndex;
    for(argIndex = 1; argIndex < argc; argIndex++){
        strcompare(argv[argIndex]);
        printf("%s has %d letters in it\n", argv[argIndex], strcompare(argv[argIndex]));
    }
    return 0;
}

int strcompare (char *str){
     int letterDex;
     for (letterDex = 1; *str != '\0'; letterDex++){
         str++;
     }
     return letterDex;
}
Run Code Online (Sandbox Code Playgroud)

另外index变量是无用的,所以我刚刚删除了它