C 代码编译没有错误,但 运行 不正确(命令行参数和指针)
C Code Compiles with No Errors but Doesn't Run Right (command line arguments and pointers)
#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++;
}
}
作业是计算一个单词中的字母数,编译时没有出现任何错误,但是当我尝试运行时,它根本不起作用
./cma_length noah bruh conner
当我按下 enter 后什么也没有。
它看起来不像是可以编译的代码。函数 strcompare 应该 return 一个 int 并且在上面的实现中它没有 return 任何东西。我假设有一个 return letterDex;在函数的末尾,但在此处复制代码时丢失了它。
在 strcompare 函数的 for 循环中,您将 *str 与“0”进行比较。我认为现在有两件事是错误的:
您正在将 *str 与“0”进行比较,但您没有更改指针值。所以你一直在比较第一个字符和'0'。您应该执行 str[index] != '0' 或不使用索引增量指针。
我认为您想查找“\0”而不是“0”。 '\0' 是表示字符串结尾的空终止符。
您没有看到任何事情发生的原因是您陷入了无限循环。
四个问题:
- 在您的
strcompare
上缺少 return 声明
- 你没有更新
char*
的指针
- 在有 4 个元素的 C 数组中,最后一个元素在索引 3 中,因此在 for 循环条件中,您必须检查
<
,而不是 <=
*str != '0'
是错误的,您正在检查该字符是否为字符 0
,而不是转义字符,即 [=17=]
因此以这种方式检查此字符 *str != '[= 18=]'
完成这些事情后,代码将是这样的:
#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 != '[=10=]'; letterDex++){
str++;
}
return letterDex;
}
而且 index
变量没用,所以我刚刚删除了它
#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++;
}
}
作业是计算一个单词中的字母数,编译时没有出现任何错误,但是当我尝试运行时,它根本不起作用
./cma_length noah bruh conner
当我按下 enter 后什么也没有。
它看起来不像是可以编译的代码。函数 strcompare 应该 return 一个 int 并且在上面的实现中它没有 return 任何东西。我假设有一个 return letterDex;在函数的末尾,但在此处复制代码时丢失了它。
在 strcompare 函数的 for 循环中,您将 *str 与“0”进行比较。我认为现在有两件事是错误的:
您正在将 *str 与“0”进行比较,但您没有更改指针值。所以你一直在比较第一个字符和'0'。您应该执行 str[index] != '0' 或不使用索引增量指针。
我认为您想查找“\0”而不是“0”。 '\0' 是表示字符串结尾的空终止符。
您没有看到任何事情发生的原因是您陷入了无限循环。
四个问题:
- 在您的
strcompare
上缺少 return 声明
- 你没有更新
char*
的指针
- 在有 4 个元素的 C 数组中,最后一个元素在索引 3 中,因此在 for 循环条件中,您必须检查
<
,而不是<=
*str != '0'
是错误的,您正在检查该字符是否为字符0
,而不是转义字符,即[=17=]
因此以这种方式检查此字符*str != '[= 18=]'
完成这些事情后,代码将是这样的:
#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 != '[=10=]'; letterDex++){
str++;
}
return letterDex;
}
而且 index
变量没用,所以我刚刚删除了它