首页 > 解决方案 > 为什么我的程序在 C 中不打印真实结果

问题描述

我找到了一个关于在数组中查找最长字符串并使用 strrev() 打印的代码;功能。我的代码成功运行,但如果我的第一个字符串大于其他字符串,我的程序将无法理解。

这是我的原型:

void LongStr(char str[][50],int n);

这是我的 Main() 函数:

int main()
{

    char str[size][wsize];
    int n;

    printf("\n How many words to accept:- ");
    scanf("%d",&n);

    printf("\n Enter %d words:- \n \n",n);

    for(int i = 0; i < n; i++)
    scanf("%s", str[i]);

    LongStr(str,n);

    return 0;
}

这是我的 LongStr(); 功能:

void LongStr(char str[][50],int n)

{

    int Max = strlen(str[0]);
    int len;
    int c;

    for(int i = 1; i < n; i++)
    {
    len = strlen(str[i]);

        if( len > Max )
        {
        c = i;
        Max = len;
        }

    }
    printf("\n The longest string with reverse model is: \"%s\" \n \n",strrev(str[c]));
}

例子:

第一串

次长字符串

第三弦

输出:strrev("SecondLongestString");

例子:

第一串

第二串

第三长串

输出:strrev("SecondLongestString");

例子:

第一长串

第二串

第三弦

输出:崩溃!

谢谢。

标签: cloops

解决方案


如果最长的字符串是第一个c,则永远不会初始化,这使得它成为垃圾,并且很可能是一个巨大的数字来索引数组。

您应该将其初始化为 0:

void LongStr(char str[][50],int n)
{

  int Max = strlen(str[0]);
  int len;
  int c = 0;
  // ...
}

PS:虽然这个问题不会发生len,但我想说将它初始化为一些东西可能是一个好习惯。换句话说,初始化所有变量是一件好事。但是,我已经C很长时间没有编写代码了,我不确定这是否是常态。


推荐阅读