int main() {
成都創(chuàng)新互聯(lián)專注于駐馬店網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供駐馬店營銷型網(wǎng)站建設(shè),駐馬店網(wǎng)站制作、駐馬店網(wǎng)頁設(shè)計、駐馬店網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務(wù),打造駐馬店網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供駐馬店網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
char a[] = "123456";
char b[] = "abcde";
int buflen = strlen(a) + strlen(b);
char *p = (char*)malloc(buflen + 1);
memset(p, 0, buflen);
printf("%d\n", buflen);
strcpy(p, a);
strcat(p, b);
printf("%s\n", p);
free(p);
}
C的數(shù)組在創(chuàng)建后不可變得,因此數(shù)組合并的思想就是把數(shù)組塞到一個足夠大的空間里形成新數(shù)組。
上面的函數(shù)是比較簡單的合并方法
程序最最主要的問題在于:你在connect函數(shù)中,返回了一個局部變量的地址,即局部變量c。
當(dāng)你返回這個指針(即局部變量c),你是想返回c這個數(shù)組的首地址是吧,確實是這樣,返回了這個地址值。但是,千萬要注意,當(dāng)你回到主函數(shù)時,事實上那個數(shù)組早已經(jīng)不存在了,已經(jīng)銷毀了,也就是說里面的數(shù)據(jù)已經(jīng)不是那個connect函數(shù)中我們希望的數(shù)據(jù)了。在主函數(shù)中printf("%s",connect(a,b)); 當(dāng)然不會得到想要的結(jié)果了。不知道你明白了沒有*_*
我改進(jìn)了一下,僅供參考
#include "stdio.h"
//增加了一個參數(shù),即s,用于存放連接后的數(shù)組元素
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]; //這個數(shù)組不放在connect函數(shù)中,而是在這里出現(xiàn),目的是為下面的調(diào)用提供接口
scanf("%s",a);
scanf("%s",b);
printf("%s\n", connect(a, b, c));
return 0;
}
你試試吧,可以正確執(zhí)行*_*
嘿嘿,對于這個程序呢,connect函數(shù)是有可以改進(jìn)之處的,我又做了一點改進(jìn),你要是愿意,可以看一下。
#include "stdio.h"
#include "string.h"
//這個connect函數(shù)是不是簡單了許多呢*_*
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;
}
首先你不能直接用靜態(tài)數(shù)組連接,因為你無法控制編譯器如何分配內(nèi)存,事實上分配在堆上的數(shù)組是由操作系統(tǒng)分配的,因此你不能指望兩個數(shù)組是連續(xù)排列的,所以連接數(shù)組只能重新分配一個能包容兩個數(shù)組元素的新數(shù)組,并將兩個數(shù)組的元素復(fù)制過去,然后釋放掉原先的數(shù)組。
用動態(tài)數(shù)組實現(xiàn)以下核心代碼:
int?*?Link(int?*a,int?lenA,int?*b,int?lenB)?{
int?*p=new[lenA+lenB];//新建一個數(shù)組,數(shù)組大小為兩數(shù)組總和
int?*pp=p;//運算指針
//復(fù)制數(shù)組不要自己使用循環(huán),那樣效率很低,應(yīng)該采用庫函數(shù)中的memcpy。
memcpy(pp,a,lenA*sizeof(int));//將數(shù)組a復(fù)制到新建內(nèi)存首地址
memcpy(pp+lenA,b,lenB*sizeof(int));//將數(shù)組b復(fù)制到前數(shù)組尾部
//如果需要,釋放數(shù)組a和b,當(dāng)然如果是靜態(tài)分配的數(shù)組,下面兩句可注釋掉
delete?[]a;
delete?[]b;
return?p;
}
其中sizeof(int)取整型類型的字節(jié)寬度,當(dāng)然你可以直接寫4,但是不同編譯器不同操作系統(tǒng)int類型的字節(jié)寬度可能不同,養(yǎng)成使用sizeof取類型寬度可以使你的代碼具有很好的兼容性,減少意外。
復(fù)制后指向會改變,我們還需要將p返回給調(diào)用者,因此不可以直接使用p進(jìn)行復(fù)制,需要建一個指針pp,復(fù)制p的值,利用pp復(fù)制數(shù)組。
pp+lenA可以讓pp指向復(fù)制后的數(shù)組a的尾部,在后面的位置復(fù)制b數(shù)組。
先printf輸出一個數(shù)組的值,不要換行,加上空格后,再輸出另一個。
網(wǎng)頁標(biāo)題:c語言連接兩個數(shù)組的函數(shù) c語言鏈接兩個數(shù)組
分享鏈接:http://www.rwnh.cn/article4/ddjciie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、用戶體驗、網(wǎng)站內(nèi)鏈、Google、虛擬主機(jī)、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)