十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
对于strcat,其格式为
网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、成都微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了大理州免费建站欢迎大家使用!
char *strcat(char *a, char *b);
其功能为,将字符串b拼接到a的尾部,并将结果字符串返回。
所以,实现该函数的思路为:
1 找到字符串a的结尾;
2 将b的所有字符复制到a尾部的空间中,到\0为止。
需要注意的是,复制的结果要包含b的结束符。
代码如下:
char *strcat(char *a, char *b)
{
char *p = a;
while(*p) p ++;
//当*p为\0时退出,即查找到a的结尾。
do
{
*p++ = *b;//将b中的每个字符复制到p中。
if(*b == '\0')break;//遇到结束符退出。
b++;//移动指针b的位置。
}while(1);
return a;//返回结果字符串首地址。
}
#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的内容复制给x1
printf("将x2的内容复制给x1,输出x1\n");
puts(x1);
n=s_trcmp(str1,str2);//比较str1与str2大小,返回一个整数,代表比较的结果
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的长度,并返回一个整数(字符串长度),
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';//给新字符串尾部加个结束符
}
void s_trcpy(char *s1,char *s2)//字符串s2复制给字符串s1
{
char *p=s1;
char *q=s2;
while(*p++=*q++);
*p='\0';//给新字符串尾部加个结束符
}
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,主要代码如下,
//程序功能实现字符串合并
#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'};
//字符串连接函数
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 );函数将字符串str2
连接到str1的末端,并返回指针str1。
int sprintf( char *buffer, const char *format, ... );sprintf和printf类似,
只是把输出发送到buffer缓冲区中,返回值是写入的字符数量。
不是说一定不行,也有可能可以。像你这种定义就有可能可以,因为如果s1,s2 在分配内存时就是连续的,那么就是越界了,你这条打印出来也会对,因为他没有越界到别的地方,都是字符串空间,你要同时把s2也打印出来,看看s2有没有被改变。c并不检测越界,只有在动行时有可能会出现执行错误。
数组里面貌似没有,只有字符串拼接,不过这中简单的变换你完全可以自己写个函数嘛
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;
}
使用这个函数就行了,记得用完要 delete 获取到的字符串哦,否则会内存泄露。