C语言 关于malloc的用法

char*combine(char*a1,char*a2){intx,y,z;chara3;x=sizeof(a1);y=sizeof(a2);z=x+y;a3=(cha... char *combine(char *a1,char*a2)
{
int x,y,z;
char a3;
x=sizeof(a1);
y=sizeof(a2);
z=x+y;
a3=(char *)malloc(z);

strcpy(a3,a1);
strcat(a3,a2);
return a3;

希望得到的结果是指针a3是指针a1和指针a2的语句的合集,并且他的内存是随着另外两个指针的大小动态变化,但是明显我的程序是错的,请问应该怎么写才可以得到这个结果?
展开
 我来答
天黑就回家happy
2019-07-28 · TA获得超过3.5万个赞
知道大有可为答主
回答量:1.2万
采纳率:33%
帮助的人:1088万
展开全部
malloc是分配动态数组存储空间的函数,引用它必需包含头文件"malloc.h"或"stdlib.h",malloc的作用是分配指定字节个内存空间,并返回该内存空间的首地址,但在赋值前必需进行强制类型转换。至于之后p其实就可以作为普通数组进行使用了,你的程序中少了free(p);,要将malloc的空间进行释放。
百度网友bdb74a5
2015-03-07 · TA获得超过416个赞
知道小有建树答主
回答量:259
采纳率:0%
帮助的人:183万
展开全部
函数的形参指针,对指针进行sizeof操作,只能得到指针在内存中所占的大小,而不是指针所指向的内容的大小。

在这个函数中,你若想知道*a1和*a2的长度,确保字符串结尾存在'\0'后,可以用strlen得到字符串长度。如果字符串中没有结束符,只能在函数的参数中带入字符串的长度,在函数中直接分配空间。
追问
a3=(char *)malloc(z);
这一行显示invalid conversion from 'char*' to 'char' [-fpermissive]

请问问题出在那里?
追答
a3 定义为char,而你(char *)malloc(z)返回的是一个char *类型,就会报错
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
戊辰1988_
2015-03-07 · 超过19用户采纳过TA的回答
知道答主
回答量:30
采纳率:100%
帮助的人:30万
展开全部
问题出在你的sizeof使用错误,sizeof输入的是指针变量,而指针变量的大小在32位下统一是4个字节,因此x和y总会是4。如果a1和a2均指向字符串的话,可以用strlen去获取字符串长度(注意字符串是有'\0'来做结束符),另外你的a3应该定义成指针变量,如char *a3,这样才可以a3=(char *)malloc(z);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shine1991
科技发烧友

2015-03-07 · 智能家居/数码/手机/智能家电产品都懂点
知道顶级答主
回答量:4.7万
采纳率:82%
帮助的人:2.3亿
展开全部
char *a3;
x=strlen(a1);
y=strlen(a2);
z=x+y+1;
a3=(char *)malloc(z);
追问
还是显示[Error] invalid conversion from 'char*' to 'char' [-fpermissive]
追答
你有好好看上面代码吗
char *a3;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式