十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
先printf输出一个数组的值,不要换行,加上空格后,再输出另一个。
成都创新互联主营福绵网站建设的网络公司,主营网站建设方案,重庆APP开发,福绵h5微信平台小程序开发搭建,福绵网站营销推广欢迎福绵等地区企业咨询
程序最最主要的问题在于:你在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++;
j++;
}
return s;
}
int main()
{
char a[10],b[10];
char c[20]; //这个数组不放在connect函数中,而是在这里出现,目的是为下面的调用提供接口
scanf("%s",a);
scanf("%s",b);
printf("%s\n", connect(a, b, c));
return 0;
}
你试试吧,可以正确执行*_*
嘿嘿,对于这个程序呢,connect函数是有可以改进之处的,我又做了一点改进,你要是愿意,可以看一下。
#include "stdio.h"
#include "string.h"
//这个connect函数是不是简单了许多呢*_*
char *connect(char *pa, char *pb, char *s)
{
int n = strlen (pa);
strcpy (s, pa);
strcpy (s+n, pb);
return s;
}
int main()
{
char a[10],b[10];
char c[20];
scanf("%s",a);
scanf("%s",b);
printf("%s\n", connect(a, b, c));
return 0;
}
首先你不能直接用静态数组连接,因为你无法控制编译器如何分配内存,事实上分配在堆上的数组是由操作系统分配的,因此你不能指望两个数组是连续排列的,所以连接数组只能重新分配一个能包容两个数组元素的新数组,并将两个数组的元素复制过去,然后释放掉原先的数组。
用动态数组实现以下核心代码:
int * Link(int *a,int lenA,int *b,int lenB) {
int *p=new[lenA+lenB];//新建一个数组,数组大小为两数组总和
int *pp=p;//运算指针
//复制数组不要自己使用循环,那样效率很低,应该采用库函数中的memcpy。
memcpy(pp,a,lenA*sizeof(int));//将数组a复制到新建内存首地址
memcpy(pp+lenA,b,lenB*sizeof(int));//将数组b复制到前数组尾部
//如果需要,释放数组a和b,当然如果是静态分配的数组,下面两句可注释掉
delete []a;
delete []b;
return p;
}
其中sizeof(int)取整型类型的字节宽度,当然你可以直接写4,但是不同编译器不同操作系统int类型的字节宽度可能不同,养成使用sizeof取类型宽度可以使你的代码具有很好的兼容性,减少意外。
复制后指向会改变,我们还需要将p返回给调用者,因此不可以直接使用p进行复制,需要建一个指针pp,复制p的值,利用pp复制数组。
pp+lenA可以让pp指向复制后的数组a的尾部,在后面的位置复制b数组。
#includestdio.h
char *mystrcat(char t[],char s[]) {
char *p = s;
char *q = t;
while(*q) ++q;
while(*q++ = *p++);
return t;
}
int main() {
char s[] = "I love C language,";
char t[81] = "So do I.";
printf("连接之前:\ns[] = %s\nt[] = %s\n",s,t);
printf("连接之后:\nt[] = %s\n",mystrcat(s,t));
return 0;
}