C程序高手帮忙给个答案

来源:百度知道 编辑:UC知道 时间:2024/05/12 15:20:09
编一个指针型函数将两个字符串连接成一个字符串,函数返回值是连接后所得字符串的首地址。两个原始字符串的首地址作为函数的参数,在主函数中调用该函数,输入两个字符串,并输出连接后的字符串。不能使用系统函数。

多谢多谢···
楼下的几位似乎都太复杂了,其实这个问题很简单的。firstclass 给的比较接近题目的要求。他是把a2字符串直接赋给a1后面。

不过大家可不可以想考虑:定义字符串a1,a2,用指针p指向a1的首地址,p+strlen(a1)指向a2的首地址。

另外,帮忙给这个分析一下
char *swap(char a[] ,char b[])
{int j,i;
j= strlen(a);
i= strlen(b);
for(int n=0;n<=i;n++)
{
a[j+n]=b[n];
}
return(a);
}

main()
{
char a1[40],a2[20];
scanf("输入字符串a1:%s",a1);
printf("输出字符串a1:%s\n",a1);
scanf("输入字符串a1:%s",a2);
printf("输出字符串a2:%s\n",a2);
printf("/n新的字符串a为:%s", swap(a1,a2));
}

最简单的方式:

#include<stdio.h>

char * charlink(char *p, char *q){
char *pp=p;
char *qq=q;
while(*pp!='\0') pp++;
while(*qq!='\0') *pp++=*qq++;
*pp='\0';
return p;
}

main(){
char a[10]="aaa";
char *b="bbb";
printf("%s\n",charlink(a,b));
}

rv2001的明显有问题。。。
1、char buffer[count]是不允许的,count是变量,不能放[]里,只能用常量
2、这句声明的是在堆栈上分配的内存,函数退出后,堆栈会立即释放,所以返回值肯定出错

下面测试过了:)bind函数是要分配内存的

#include <stdio.h>
#include <malloc.h>

char *bind(char *data1,char *data2){
char *ret = NULL;
int i = 0, count1 = 0, count2 = 0;

if(data1 == NULL || data2 == NULL) return NULL;
while(data1[count1++]);
while(data2[count2++]);
ret = (char *)malloc(sizeof(char) * (count1 + count2 - 1));
count1 = 0; count2 = 0;
while(data1[count1])
{