C语言之指针:连接两个字符数组

来源:百度知道 编辑:UC知道 时间:2024/05/16 06:54:20
请问各位高人下面这个程序输出为何有错:
多谢多谢!!
#include "stdio.h"
char *connect(char *pa,char *pb)
{
char c[20],*pc=c;
int i=0,j=0;
while(*(pa+i)!='\0')
{
*(pc+i)=*(pa+i);
i++;
}

while(*(pb+j)!='\0')
{
*(pc+i)=*(pb+j);
i++;
j++;
}
return(c);
}
main()
{
char a[10],b[10];
scanf("%s",a);
scanf("%s",b);
printf("%s",connect(a,b));

}

1 通过指针,找到第一个目标字符数组结尾

2 将源字符数组逐项复制到目标字符数组尾部

3 在最后添加结束符\0

代码:

void my_str_cat(char *a, char *b)
{
    while(*a)a++;
    a--;
    while(*b)*a++=*b++;
    *a='\0';
}

程序最最主要的问题在于:你在connect函数中,返回了一个局部变量的地址,即局部变量c。
当你返回这个指针(即局部变量c),你是想返回c这个数组的首地址是吧,确实是这样,返回了这个地址值。但是,千万要注意,当你回到主函数时,事实上那个数组早已经不存在了,已经销毁了,也就是说里面的数据已经不是那个connect函数中我们希望的数据了。在主函数中printf("%s",connect(a,b)); 当然不会得到想要的结果了。不知道你明白了没有*_*

我改进了一下,仅供参考
#include "stdio.h"

//增加了一个参数,即s,用于存放连接后的数组元素
char *connect(char *pa, char *pb, char *s)
{
char *pc = s;
int i=0,j=0;

while(*(pa+i)!='\0')
{
*(pc+i)=*(pa+i);
i++;
}

while(*(pb+j)!='\0')
{
*(pc+i)=*(pb+j);
i++;