为什么这个程序会抛出分段错误?这些函数单独运行良好,但我不明白为什么当我尝试将字符串存储在数组中时会出现错误。我需要将所有可能的回文存储在数组中。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int isPal(char s[])
{
int i = 0, j = 0;
while(s[j]) {
j++;
}
j--;
while(i <= j) {
if(s[i] != s[j]) {
return 0;
}
i++;
j--;
}
return 1;
}
char *substring(char s[], int start, int length)
{
int i, k = 0;
int end;
char *p;
end = start + length - 1;
p = (char *)malloc(length);
for(i = start; i <= end; i++ ) {
p[k] = s[i];
k++;
}
p[k] = 0;
return p;
}
int main()
{
char s[] = "madamsalayalaspongo";
char *p[20];
int i, j, k = 0;
for(i = 0; i < strlen(s) - 1; i++) {
j = 2;
while(s[j]) {
if(isPal(substring(s, i, j)));
{
p[k] = substring(s, i, j);
k++;
}
j++;
}
}
for(i = 0; i < (k - 1); i++) {
printf("%s\n", p[i]);
}
}