c - 为什么我的程序在 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");
例子:
第一长串
第二串
第三弦
输出:崩溃!
谢谢。
解决方案
如果最长的字符串是第一个c
,则永远不会初始化,这使得它成为垃圾,并且很可能是一个巨大的数字来索引数组。
您应该将其初始化为 0:
void LongStr(char str[][50],int n)
{
int Max = strlen(str[0]);
int len;
int c = 0;
// ...
}
PS:虽然这个问题不会发生len
,但我想说将它初始化为一些东西可能是一个好习惯。换句话说,初始化所有变量是一件好事。但是,我已经C
很长时间没有编写代码了,我不确定这是否是常态。
推荐阅读
- python-2.7 - 用值计数填充字典的 Pythonic 方法
- gemfire - Gemfire '@type' 不工作
- javascript - 在 onclick 中传递动态对象 - JavaScript/jQuery
- javascript - 使模态出现一次[cookie同意]
- c# - Python .Net 未加载 .Net Standard 2.0 dll
- java - 在一项活动中没有获得多个意图
- mysql - 无法在mysql中为用户分配权限
- axon - 在一个命令处理程序中使用多个聚合
- javascript - 如果linkedwithfd选择选项是yes然后其他两个选择选项在jquery或java脚本中是no,如何动态显示
- html - 如何将此水平菜单变为垂直菜单,使菜单在右侧,子菜单在左侧?