指针函数调用的问题
编个程序,将字符串的内存逆序输出。
main()
{
char s[10]= "hello! ";
inverp(s);
printf( "%s\n ",s);
}
inverp(char *p)
{
int len,t=0;
char a[10];
len=strlen(p);
for(;p[len]&&len> =0;len--)
a[t++]=p[len];
a[t]= '\0 ';
return(a);
}
帮忙看一下我写的程序哪里不对?还有这个retrun我还是搞不清楚,请大家指点一下。
[解决办法]
return (a);这句就不对啊。你的变量a在函数inverp结束后,它的空间就被释放了,以后其存放的是什么就和你无关了。
你主函数中的S内容没有变过的。。
[解决办法]
以最小的改动给你改了下。。。
#include <stdio.h>
#include <string.h>
char *inverp(char *);
void main()
{
char s[10]= "hello! ";
char *p;
p = inverp(s);
printf( "%s\n ",p);
}
char *inverp(char *p)
{
int len,t=0;
static char a[10];
len=strlen(p)-1;
for(;p[len]&&len> =0;len--)
a[t++]=p[len];
a[t]= '\0 ';
return(a);
}
[解决办法]
void inverp(char *p)
{
int len,t=0;
char a[10];
int size=strlen(p);//字符串长度
for(len=size-1;p[len]&&len> =0;len--) //索引是从0 - (size-1)
a[t++]=p[len];
a[t]= '\0 ';
for (int i=0;i <size;++i)
{
p[i]=a[i];//赋给p
}
}
[解决办法]
1、inverp 中 len=strlen(p); 从你的循环来看应该为 len=strlen(p)-1;
2、a为函数种分配的局部变量,函数结束后a数组的内存被释放,所以外面得不到得到的返回值是不确定的。
3、根据你main函数的调用,你的意思应该是直接修改原是字符串,而你作的是将她的倒序放在另一块内存里 (a数组)
函数可以如下:
char * inverp(char *p)
{
int len, n, i;
char tmp;
char *strTmp = p;
len = strlen(p) - 1;
n = len / 2;
for ( i=0; i <n; i++)
{
tmp = p[i];
p[i] = p[len-i];
p[len-i] = tmp;
}
return strTmp;
}
[解决办法]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void inverp(char *s,char *dest,int len);
void main()
{
char s[10]= "hello! ";
char *dest;
int len=strlen(s);
dest=(char *)malloc(sizeof(s));
inverp(s,dest,len);
printf( "%s\n ",dest);
free(dest);
}
void inverp(char *s,char *dest,int len)
{
int i=0;
while(len)
{
dest[i]=s[len-1];
len--;
i++;
}
dest[i]= '\0 ';
}
帮你重写了一个。用指针返回你所需要的。