为什么我的程序没有在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]));
}

示例:

第一串

第二longeststring

第三弦

输出:strrev(" secondlongestString");

示例:

第一串

第二串

第三longeststring

输出:strrev(" secondlongestString");

示例:

firstLongestString

第二串

第三弦

输出:崩溃!

谢谢。

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

您应该将其初始化为0:

void LongStr(char str[][50],int n)
{
  int Max = strlen(str[0]);
  int len;
  int c = 0;
  // ...
}

ps:尽管len不会出现此问题,但我想也是要将其初始化为某些东西可能是一个好习惯。换句话说,初始化所有变量是一件好事。但是,我很长时间以来没有在C中代码,我不确定这是否是常态。

真的很简单,这只是您的代码中缺少的一块

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

您需要给c一个值,因为它没有基本价值,所以它不起作用,因此请尝试将代码更改为

int Max = strlen(str[0]);
int len;
int c = 0; // base value of 0

最新更新