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的语句的合集,并且他的内存是随着另外两个指针的大小动态变化,但是明显我的程序是错的,请问应该怎么写才可以得到这个结果? 展开
{
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的语句的合集,并且他的内存是随着另外两个指针的大小动态变化,但是明显我的程序是错的,请问应该怎么写才可以得到这个结果? 展开
展开全部
函数的形参指针,对指针进行sizeof操作,只能得到指针在内存中所占的大小,而不是指针所指向的内容的大小。
在这个函数中,你若想知道*a1和*a2的长度,确保字符串结尾存在'\0'后,可以用strlen得到字符串长度。如果字符串中没有结束符,只能在函数的参数中带入字符串的长度,在函数中直接分配空间。
在这个函数中,你若想知道*a1和*a2的长度,确保字符串结尾存在'\0'后,可以用strlen得到字符串长度。如果字符串中没有结束符,只能在函数的参数中带入字符串的长度,在函数中直接分配空间。
追问
a3=(char *)malloc(z);
这一行显示invalid conversion from 'char*' to 'char' [-fpermissive]
请问问题出在那里?
追答
a3 定义为char,而你(char *)malloc(z)返回的是一个char *类型,就会报错
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题出在你的sizeof使用错误,sizeof输入的是指针变量,而指针变量的大小在32位下统一是4个字节,因此x和y总会是4。如果a1和a2均指向字符串的话,可以用strlen去获取字符串长度(注意字符串是有'\0'来做结束符),另外你的a3应该定义成指针变量,如char *a3,这样才可以a3=(char *)malloc(z);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询