C语言为什么出错?

来源:百度知道 编辑:UC知道 时间:2024/05/31 11:01:57
// test1.cpp : Defines the entry point for the console application.
//

#include "stdio.h"
#include "string.h"
int rev(char a[])
{
char b[10000];
int i;
for(i=1;i<=strlen(a);i++)
b[i]=a[strlen(a)+1-i];
return(b[10000]);
}
void main()
{
char s1[10000],s2[10000];
printf("请输入s1:");
gets(s1);
strcpy(s2,rev(s1));
printf("s1倒序为:%s\n",s2);
}
运行不了哦

你这个程序有三处错误:
#include "stdio.h"
#include "string.h"
int rev(char a[]) //应该把返回值改为 char *
{
char b[10000];
int i;
for(i=1;i<=strlen(a);i++) /*数组的下标问题:如char a【100】那么数组下,标的开始是从a【0】到a【99】,所以说你这里也有问题了:首先 for里面的i应该初始化为0,for的循环体a[strlen(a)+1-i]也有错误,应该改为:a[strlen(a)-i-1]*/
b[i]=a[strlen(a)+1-i];
return(b[10000]); //这里改为 return b
}
void main()
{
char s1[10000],s2[10000];
printf("请输入s1:");
gets(s1);
strcpy(s2,rev(s1));//错误主要是在这里,这个函数的第二个参数是一个 const char *(静态指针变量),你这里是调用了一个函数,他的返回值是个int的所以报错了
printf("s1倒序为:%s\n",s2); /*用%S是要遇见'/0'才会结束的,因为你的数组大小为10000,而且没有初始化,如果你输入的是123456,那么输出的会是654321。。。。。。很多乱码*/
}

修改后的程序:
#include "stdio.h"
#include "string.h"
char* rev(char a[])
{
char b[10000];
memset(b,'\0',10000);
int i;
for(i=0;i<strlen(a);i++)
b