對于strcat,其格式為

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、成都微信小程序、集團企業(yè)網(wǎng)站建設(shè)等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了大理州免費建站歡迎大家使用!
char *strcat(char *a, char *b);
其功能為,將字符串b拼接到a的尾部,并將結(jié)果字符串返回。
所以,實現(xiàn)該函數(shù)的思路為:
1 找到字符串a(chǎn)的結(jié)尾;
2 將b的所有字符復制到a尾部的空間中,到\0為止。
需要注意的是,復制的結(jié)果要包含b的結(jié)束符。
代碼如下:
char?*strcat(char?*a,?char?*b)
{
char?*p?=?a;
while(*p)?p?++;
//當*p為\0時退出,即查找到a的結(jié)尾。
do
{
*p++?=?*b;//將b中的每個字符復制到p中。
if(*b?==?'\0')break;//遇到結(jié)束符退出。
b++;//移動指針b的位置。
}while(1);
return?a;//返回結(jié)果字符串首地址。
}
#includestdio.h
void s_trcat(char *s1,char *s2);//連接兩個字符串
void s_trcpy(char *s1,char *s2);//字符串s2復制給字符串s1
int s_trcmp(char *s1,char *s2);//兩個字符串比較大小
int s_trlen(char *s);//計算一個字符串的長度
int main()
{
char s1[11]="12345", s2[11]="ABCDE";
char x1[11]="12345",x2[11]="SSSKK";
char str1[11]="ABCD",str2[11]="ACB";
char s[11]="ABCDEF";
int n,len;
s_trcat(s1,s2);//拼接s1,s2
printf("拼接s1,s2,輸出s1\n");
puts(s1);
s_trcpy(x1,x2);//將x2的內(nèi)容復制給x1
printf("將x2的內(nèi)容復制給x1,輸出x1\n");
puts(x1);
n=s_trcmp(str1,str2);//比較str1與str2大小,返回一個整數(shù),代表比較的結(jié)果
if(n==0)
printf("str1與str2相同\n");
if(n==1)
printf("str1大于str2\n");
if(n==-1)
printf("str1小于str2\n");
len=s_trlen(s);//計算字符串s的長度,并返回一個整數(shù)(字符串長度),
printf("字符串s的長度:%d\n",len);
}
void s_trcat(char *s1,char *s2)//連接兩個字符串
{
char *p=s1;
char *q=s2;
while(*p)
p++;
while(*q)
{
*p=*q;
p++;
q++;
}
*p='\0';//給新字符串尾部加個結(jié)束符
}
void s_trcpy(char *s1,char *s2)//字符串s2復制給字符串s1
{
char *p=s1;
char *q=s2;
while(*p++=*q++);
*p='\0';//給新字符串尾部加個結(jié)束符
}
int s_trcmp(char *s1,char *s2)//兩個字符串比較大小
{
char *p=s1;
char *q=s2;
int len1=0,len2=0;
while(*p++)
len1++;
while(*q++)
len2++;
p=s1,q=s2;
while(*p!='\0'*q!='\0')
{
if(*p*q)
return 1;
if(*p*q)
return -1;
p++;
q++;
}
if(len1==len2)
return 0;//返回0,兩個字符串相同
if(len1len2)
return 1;//返回1,前大于后
if(len1len2)
return -1;//返回-1,前小于后
}
int s_trlen(char *s)//計算一個字符串的長度
{
char *p=s;
int len=0;
while(*p++)
len++;
return len;//返回字符串長度
}
主要有兩種方法,一個是字符串連接操作strcat,另一個是格式化輸出sprintf,主要代碼如下,
//程序功能實現(xiàn)字符串合并
#include stdio.h
#include string.h
int main(int argc, char *argv[])
{
char name1[32]="456",name2[32]="123",name3[32]="789";
char NAME1[256]={'\0'},NAME2[256]={'\0'};
//字符串連接函數(shù)
strcat( NAME1,name2);
strcat( NAME1,name1);
strcat( NAME1,name3);
//格式化輸出
sprintf(NAME2,"%s%s%s", name2, name1, name3);
printf("%s\n",NAME1);
printf("%s\n",NAME2);
return 0;
}
char *strcat( char *str1, const char *str2 );函數(shù)將字符串str2
連接到str1的末端,并返回指針str1。
int sprintf( char *buffer, const char *format, ... );sprintf和printf類似,
只是把輸出發(fā)送到buffer緩沖區(qū)中,返回值是寫入的字符數(shù)量。
不是說一定不行,也有可能可以。像你這種定義就有可能可以,因為如果s1,s2 在分配內(nèi)存時就是連續(xù)的,那么就是越界了,你這條打印出來也會對,因為他沒有越界到別的地方,都是字符串空間,你要同時把s2也打印出來,看看s2有沒有被改變。c并不檢測越界,只有在動行時有可能會出現(xiàn)執(zhí)行錯誤。
數(shù)組里面貌似沒有,只有字符串拼接,不過這中簡單的變換你完全可以自己寫個函數(shù)嘛
char* StringCat(char* pszOld, char* pszCat){
int nLen = strlen(pszOld) + strlen(pszCat);
char* pszTemp = new char(nLen);
if(pszTemp){
memset(pszTemp, 0, nLen);
strcpy(pszTemp, pszOld);
strcat(pszTemp, pszCat);
return pszTemp;
}
return NULL;
}
使用這個函數(shù)就行了,記得用完要 delete 獲取到的字符串哦,否則會內(nèi)存泄露。
本文標題:c語言內(nèi)存數(shù)據(jù)拼接函數(shù),c語言內(nèi)存拷貝函數(shù)
文章源于:http://chinadenli.net/article20/dsihdco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務器托管、電子商務、品牌網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計公司、用戶體驗、定制網(wǎng)站
聲明:本網(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)