C语言判断回文字符串报Array must be initialized with a brace enclosed initializer错误
问题分析
直接报错原因
你遇到的编译错误核心原因是:C语言语法规定,字符数组初始化时仅支持大括号包裹的初始化列表,strrev()函数的返回值是char*类型的指针,不能直接用来给数组b做初始化赋值,因此编译器抛出"Array must be initialized with a brace enclosed initializer"错误。
代码其他逻辑/语法问题
scanf("%s",&a[100]);写法错误:&a[100]指向数组a最后一个元素的下一块非法内存,输入内容会直接越界写入,正确写法是传入数组首地址scanf("%s", a);strrev()是原地反转函数:调用strrev(a)会直接修改原数组a的内容,就算你后续能正确赋值给b,也得不到原始字符串和反转字符串的对比结果- 判断逻辑完全错误:
if(a[100]=b[100])里的=是赋值运算符,不是相等判断的==a[100]、b[100]都是数组越界访问,长度为100的数组合法下标范围是0~99- 要判断两个字符串是否相等,需要用
strcmp()函数逐字符对比,不能直接对比单个下标元素
修正后代码
#include<stdio.h> #include<string.h> int main() { char a[100], b[100]; // 正确读取输入字符串 scanf("%s", a); // 先把原始字符串拷贝到b中 strcpy(b, a); // 反转b,此时a是原始字符串,b是反转后的字符串 strrev(b); // 用strcmp对比两个字符串,返回0说明完全相等 if(strcmp(a, b) == 0) { printf("It is a palindrome"); } else { printf("It is not a palindrome"); } return 0; }
内容的提问来源于stack exchange,提问作者Manik
相关产品推荐
相关产品推荐

