#include<stdio.h> #include<string.h> int main() { int i, length; char str[100]; while(gets(str)&&str!=EOF) { length = strlen(str); for (i = 0; i < length/2; i++) { if (str[i] != str[length-1-i]) { break; } } if (i >= length / 2) printf("Yes\n"); else printf("No\n"); } return 0; }为什么会报错
时间: 2024-02-14 11:10:29 浏览: 70
这段代码的问题可能是在使用 `gets()` 函数上。`gets()` 函数已经被标准C废弃,使用该函数可能会导致安全漏洞。建议使用 `fgets()` 函数代替 `gets()` 函数,因为 `fgets()` 函数可以指定读取的字符数,从而避免缓冲区溢出。
此外,使用 `str!=EOF` 来判断输入是否结束是错误的,因为 `str` 是一个字符数组,而不是文件指针。应该使用 `fgets()` 函数的返回值来判断输入是否结束。
最后,还有一个小问题是,在输出结果的时候,字符串 "Yes" 和 "No" 后面应该加上换行符 `\n`,否则输出会出现问题。
下面是修改后的代码:
```
#include <stdio.h>
#include <string.h>
int main() {
int i, length;
char str[100];
while (fgets(str, 100, stdin) != NULL) {
length = strlen(str);
if (str[length - 1] == '\n') {
str[length - 1] = '\0'; // 去掉换行符
length--;
}
for (i = 0; i < length / 2; i++) {
if (str[i] != str[length - 1 - i]) {
break;
}
}
if (i >= length / 2) {
printf("Yes\n");
} else {
printf("No\n");
}
}
return 0;
}
```
希望可以帮助你解决问题!
阅读全文