我找到了一个有关在数组中找到最长字符串的代码,并用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