我知道论证的冗余。因此,我想提前感谢你们的耐心等待。
我仔细阅读了很多关于this和this等问题的好主题。我从概念上清楚了解核心转储是什么,但我无法弄清楚实际是什么以及如何检测它。
请考虑以下我正在处理的示例:它是一个简单的程序,用于检查输入字符串是否为回文:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 20
int length(char s[SIZE]){
int i;
while(s[i] != 0)
i++;
return i;
}
int main(){
char s[SIZE], c;
int i = 0, j, flag = 1;
printf("\n\nGood morning, master. Tell me a word. I will check if it is a\n"
"palindrome\n\n");
for(i = 0; (c = getchar()) != '\n'; ++i){
s[i] = c;
}
j = length(s) - 1;
while(flag && i < j){
flag = s[i] == s[j];
i++; j--;
}
if(flag)
printf("\n\nSuccess!\n\n");
return 0;
}
这个程序的原因是什么导致崩溃的核心?&#34;
答案 0 :(得分:2)
你的长度函数有3
个大问题:
i
未初始化为i
值。int length(char s[SIZE]){
int i = 0;
while ((s[i] != 0) && (i<size-1))
i++;
return i;
}
你必须在你的&#34;角色收集循环中照顾s
长度&#34;太。你必须注意EOF(可以由getchar返回,例如在Linux上使用 CTRL + D ),你必须终止你的字符串。 C-Strings
为nul-terminated
for (i = 0; (((c = getchar()) != '\n') && (c!=EOF)&& (i<SIZE-2)); ++i)
{
s[i] = c;
}
s[i] = '\0';
最后注意你的最终循环不是你猜的,只有在输入字符串中有2个相同的字符时才返回...
答案 1 :(得分:1)
您尚未在长度函数中初始化i
,因此其值可以是任何
如果其值大于SIZE
,您将最终访问无效内存,从而导致段错误