先printf輸出一個(gè)數(shù)組的值,不要換行,加上空格后,再輸出另一個(gè)。
成都創(chuàng)新互聯(lián)主營福綿網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP開發(fā),福綿h5微信平臺小程序開發(fā)搭建,福綿網(wǎng)站營銷推廣歡迎福綿等地區(qū)企業(yè)咨詢
程序最最主要的問題在于:你在connect函數(shù)中,返回了一個(gè)局部變量的地址,即局部變量c。
當(dāng)你返回這個(gè)指針(即局部變量c),你是想返回c這個(gè)數(shù)組的首地址是吧,確實(shí)是這樣,返回了這個(gè)地址值。但是,千萬要注意,當(dāng)你回到主函數(shù)時(shí),事實(shí)上那個(gè)數(shù)組早已經(jīng)不存在了,已經(jīng)銷毀了,也就是說里面的數(shù)據(jù)已經(jīng)不是那個(gè)connect函數(shù)中我們希望的數(shù)據(jù)了。在主函數(shù)中printf("%s",connect(a,b)); 當(dāng)然不會得到想要的結(jié)果了。不知道你明白了沒有*_*
我改進(jìn)了一下,僅供參考
#include "stdio.h"
//增加了一個(gè)參數(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]; //這個(gè)數(shù)組不放在connect函數(shù)中,而是在這里出現(xiàn),目的是為下面的調(diào)用提供接口
scanf("%s",a);
scanf("%s",b);
printf("%s\n", connect(a, b, c));
return 0;
}
你試試吧,可以正確執(zhí)行*_*
嘿嘿,對于這個(gè)程序呢,connect函數(shù)是有可以改進(jìn)之處的,我又做了一點(diǎn)改進(jìn),你要是愿意,可以看一下。
#include "stdio.h"
#include "string.h"
//這個(gè)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ù)組連接,因?yàn)槟銦o法控制編譯器如何分配內(nèi)存,事實(shí)上分配在堆上的數(shù)組是由操作系統(tǒng)分配的,因此你不能指望兩個(gè)數(shù)組是連續(xù)排列的,所以連接數(shù)組只能重新分配一個(gè)能包容兩個(gè)數(shù)組元素的新數(shù)組,并將兩個(gè)數(shù)組的元素復(fù)制過去,然后釋放掉原先的數(shù)組。
用動態(tài)數(shù)組實(shí)現(xiàn)以下核心代碼:
int?*?Link(int?*a,int?lenA,int?*b,int?lenB)?{
int?*p=new[lenA+lenB];//新建一個(gè)數(shù)組,數(shù)組大小為兩數(shù)組總和
int?*pp=p;//運(yùn)算指針
//復(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ù)制,需要建一個(gè)指針pp,復(fù)制p的值,利用pp復(fù)制數(shù)組。
pp+lenA可以讓pp指向復(fù)制后的數(shù)組a的尾部,在后面的位置復(fù)制b數(shù)組。
#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;
}
分享文章:連接兩個(gè)數(shù)組的函數(shù)C語言 連接兩個(gè)數(shù)組的函數(shù)c語言怎么寫
鏈接分享:http://muchs.cn/article18/hgepgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、定制網(wǎng)站、網(wǎng)站導(dǎo)航、網(wǎng)站排名、網(wǎng)站改版、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)