比较字符串长度的C语言函数

3

我在C语言中比较字符串方面遇到了麻烦。首先,我需要从命令行参数中找出每个字符串的长度,然后将它们进行比较,并打印出最大的那个。

目前为止,我只是打印出了每个输入字符串的长度。我需要根据长度而不是字母顺序进行比较。

我不明白为什么它现在无法工作,以及我应该怎么做才能解决问题?谢谢!

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    int i, length;

    for(i = 0; i<argc; i++)
    {
        length = strlen(argv[i]);
        printf("%s %d\n", argv[i], length);

        if(strlen(argv[i]) < strlen(argv[i+1]))
        {
            printf("%s is the biggest \n", argv[i+1]);
        }
        else
        {
            printf("%s is the biggest \n", argv[i]);
        }
    }
    return 0;
}

6
首先,你需要修复“off-by-one overflow”的问题。在访问 argv[i+1] 时,只有在i < argc - 1 的情况下才能进行迭代。 - ThiefMaster
你的代码段错误了。你有读取核心转储文件以找出它在哪里出错吗? - Aftnix
3
argv[0]代表程序名称,而非一个参数。 - SpacedMonkey
3个回答

8
你的代码存在几个问题。
首先,如果你在for循环中使用了“i
其次,你可能没有比较想要比较的字符串。 "argv [0]" 是表示程序路径的字符串;传递给程序的第一个参数是 “argv [1]”。因此,你需要将“for”中的“i = 0”更改为“i = 1”。
最后,如果你只想得到最长的字符串,则不应在“for”循环中打印任何内容。相反,你应该创建两个变量,如“max_length”和“max_length_idx”,用于存储迄今为止找到的最大字符串的长度和索引。然后,在“for”循环之后,程序将打印字符串“argv [max_length_idx]”。

2
为了获得点赞,请不要忘记告诉原帖作者,如果只需要最长的字符串,则 for 循环内部不应有任何打印操作。 - Ray Toal
@Ray Toal:我认为这很明显... :) - netcoder
@RayToal:是的,我也这么认为。不过我添加了一些解释 :) - houbysoft
好的 +1 但你永远不知道.... :) 只是想让回答更完整和有帮助。 - Ray Toal

4
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
   int i, max_length, max_index;

   max_index = 0;
   max_length = strlen(argv[0]);

   for(i = 1; i < argc; i++)
   {
        if(strlen(argv[i]) > max_length)
        {   
            max_length = strlen(argv[i]);
            max_index = i;
        }
    }

   printf("The longest is: %s with length equal: %d\n", argv[max_index], max_length);

   return 0;
}

不客气 :) 请注意,我还比较了应用程序名称(argv [0])。我不确定是否也应该进行检查。 - Adam Sznajder
是的,没错,我明白了。那并不是真的,只是我的argv[0]理解有误。 - Kyle Orton

0

这不会导致段错误...

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    int i, length;

    for(i = 0; i<argc - 1; i++)
    {
       length = strlen(argv[i]);
       printf("%s %d\n", argv[i], length);

    if(strlen(argv[i]) < strlen(argv[i+1]))
    {
       printf("%s is the biggest \n", argv[i+1]);
    }
    else
    {
       printf("%s is the biggest \n", argv[i]);
    }
   }
 return 0;
 }

是的,谢谢。我尝试了一下,现在知道为什么我会有运行时错误了。 - Kyle Orton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接