char *p=(char*)malloc(sizeof(char)*(strlen(a)+1));//你也可以用数组,但是数组不能返回

char*p=(char*)malloc(sizeof(char)*(strlen(a)+1));//你也可以用数组,但是数组不能返回inti;for(i=strlen(... char *p=(char*)malloc(sizeof(char)*(strlen(a)+1));//你也可以用数组,但是数组不能返回
int i;
for(i=strlen(a)-1;i>0;i--)
*(p++)=*(a+i);
*p='\0';//p已经往后移了,你原来的写法*(p+strlen(a))='\0';是错误的
puts(p);
return p;//这里不适合返回,因为str是在这个函数里面malloc的,其实应该在这里free掉
为什么我这里直接用p开辟空间就不行了呢?
展开
 我来答
百度网友6567883c53
2012-12-14 · TA获得超过4737个赞
知道大有可为答主
回答量:1260
采纳率:0%
帮助的人:1379万
展开全部
楼主你好。
要理解程序的内部运行机制哈。你的确用p来分配了空间,可是你想想最后p指向了哪儿?是不是字符串的末尾?
所以你puts(p)是不行的。
我之所以用str来分配空间就是让str始终指向字符串的首部,然后用p来进行后移和赋值操作。
明白了吧?还不懂追问吧。
str p
↓ ↓
□□□□□□□□□□□□□□
str始终指向字符串首部。
p后移。
来自:求助得到的回答
sushaofei
2012-12-14
知道答主
回答量:8
采纳率:0%
帮助的人:11.3万
展开全部
char* str = (char*)malloc(sizeof(char*) * (strlen(a)+1));
char* p = str;
for(int i = strlen(a)-1; i>=0; i--)
*(p++) = *(a+i);
*p = '\0'; //这时候p这个指针已经指向刚才分配的那块内存的最后一个字节了。如果再puts(p) 只会输出'\0';free(p)会出问题;
puts(str);
return str;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鼻行动物
2012-12-14 · TA获得超过100个赞
知道答主
回答量:65
采纳率:0%
帮助的人:52万
展开全部
不大清楚你想问啥,但是你return p; p都被你移到最后了,p指向'\0'了都,所以建议你如果最后要返回这个字符串的话,最好
char *des=(char*)malloc(sizeof(char)*(strlen(a)+1));
char *p =des;
最后return str;别忘记free就行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
去尘远
2012-12-14 · TA获得超过483个赞
知道小有建树答主
回答量:207
采纳率:100%
帮助的人:145万
展开全部
你的问题是啥啊?感觉后面的注释就是答案似的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式