C语言,判断一个字符串是不是回文,不知道错在哪里,求解。

#include "stdio.h"
#include "string.h"
void main()
{
char str1[40];
char str2[40];
gets(str1);
str2 = strrev(str1);
if(!strcmp(str1,str2))
puts("str1是回文");
else
puts("str1不是回文");
}
这个不知道错在哪里帮我看看吧

str2 是数组名,指向数组的地址,是常量,不可更改。所以这里错了:str2 = strrev(str1);
你可以用循环把值一个个的赋给str2.
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-11-29
#include "stdio.h"
#include "string.h"
void main()
{
char str1[40];
char *p;
gets(str1);
p = strrev(str1);
if(!strcmp(str1,p))
puts("str1是回文");
else
puts("str1不是回文");
}追问

!strcmp(str1,p) 这里的感叹号是什么意思
还有*p也看不懂 什么意思

第2个回答  2012-11-29
str2 = strrev(str1);这句错了,数组名是个地址常量,怎么可以接受赋值呢?
1、删除这句; str2 = strrev(str1);
2、 然后将 if(!strcmp(str1,str2)) 改为 if(!strcmp(str1,strrev(str1))试试追问

error 只执行if

追答

将后面改为
if(strcmp(str1,strrev(str1))
puts("str1是回文");
else
puts("str1不是回文");
}
注意括号,分号都得是英文格式

追问

你可以运行么?我这边不行额

相似回答