这个C程序哪错了?

来源:百度知道 编辑:UC知道 时间:2024/09/28 07:44:52
#include "stdio.h"
#include "string.h"
fun(char* p)
{
char* c;
int n,i,j,flag;
n=i=j=flag=0;
n=strlen(p);
for (i=n-1;i>=0;i--)
{
*(c+j)=*(p+i);
j++;
}
*(c+j)='\0';
if (c==p) flag=1;
else flag=0;
return flag;
}
void main()
{
char* a;
int b;
printf("请输入一个字符串\n");
gets(a);
printf("该字符串为:%s\n",a);
puts(a);
b=fun(a);
if(b) printf("该字符串是回文");
else printf("该字符串不是回文");
}

fun(char* p)
{
......
*(c+j)=*(p+i); //由于指针c指向的内存空间不是申请的,此操作会改写这些空间,可能会造成什么问题
......
if (c==p) flag=1; //无法通过c==p来比较指针c、p指向的字符串,此操作只是比较指针c、p是否指向同一个内存空间
......
}
void main()
{
char* a; //请申请一块内存空间给指针a,如改用char a[80];
......
}
判断字符串是不是回文可以这样:
int fun(char* p)
{
int n=strlen(p);
int l=0;
int r=n-1;
while(l<r)
{
if(p[l]!=p[r])return 0;
l++;
r--;
}
return 1;
}

#include "stdafx.h"
#include "string.h"
int fun(char *p)
{
char c[10];
int n,i,j,flag;
n=i=j=flag=0;
n=strlen(p);
for (i=n-1;i>=0;i--)
{
*(c+j)=*(p+i);
j++;
}
*(c+j)='\0';
if (strcmp(c,p)==0) flag=1;
else flag=0;
return flag;
}
void main()
{
char a[10];
int b;
printf("请输入一个字符串\n");
scanf("%s",a);
printf("该字符串为: