【发布时间】:2015-12-09 22:14:22
【问题描述】:
我有以下程序:
#include <stdio.h>
#include <stdbool.h>
#define MAX 100
//a)
bool isPalyndrom(char c[], int cnt) {
int i;
char pal[MAX];
int j = 0;
for (i = cnt - 1; i >= 0; i++) {
pal[j] = c[i];
j++;
}
for (i = 0; i < cnt; i++) {
if (c[i] != pal[i]) return false;
}
return true;
}
int main() {
char c, s[MAX];
int i = 0;
int cnt = 0;
do {
c = getchar();
s[i] = c;
i++;
cnt++;
printf("\n%s\n", s);
} while (c != '\n');
printf("%d", cnt);
bool istrue = isPalyndrom(s, cnt);
if (istrue) {
printf("\n%s Pal.\n", s);
} else {
printf("\n%s not Pal.\n", s);
}
return 0;
}
但是,当我运行它时,显示:分段错误,问题出在 do-while 循环中,程序停止,在我的 char c 写入数组之后和 do-while 循环离开之前。有人可以看看 do-while 循环吗?
【问题讨论】:
-
问题出在
isPalindrome()函数中。仔细检查该函数下循环中的索引。 -
除了其他cmets,s char数组没有初始化。因此,它可能不会以空值终止,并且 do-while 循环中的 printf 将是一个问题。在 s 上做一个 memset 到零,应该会更好。
-
真的分割“失败”了吗?
-
是的,但是已经解决了,我写了这个:c=getchar();而(c!='\n'){ s[i]=c;我++; cnt++; c=getchar(); } 加上纠正了我错误写的可笑的 i++