特别说明:由于vs2008中assert后面不能定义变量,所以将变量定义在了assert前面!!!
一:编程思想(此处的arr1为被拷贝的字符串,arr2为要拷贝的字符串)
1.拼接的时候注意函数传参时上传的是两个源字符串的首元素地址。
2.必须要从被拷贝的字符串 arr1 未初始化字符的空间开始将要拷贝的字符串arr2的字符拷贝到被拷贝的字符串中。
3.将arr2中’ \0 '拷贝到arr1中,以结束拷贝。
二:代码
#include<stdio.h>
#include<assert.h>
void my_strcat( char *arr1,const char *arr2)
{
char* ret=arr1;
const char* dst=arr2;
assert(arr1);
assert(arr2);
while(*ret)
{//将指针所指目标转移到未赋值的字符位置
ret++;
}
while(*dst)
{
*ret = *dst;
dst++;
ret++;
}
*ret=*dst; //将' \0 '拷贝到arr1中
printf("%s\n",arr1);
}
int main()
{
char arr1[32]="I am a ";
const char arr2[]="good student!";
my_strcat(arr1,arr2);
return 0;
}
三:监视结果
未拷贝前的arr1中的内容
arr2中的内容
拷贝后的arr1中的内容
四:运行结果
五:对strcat函数的简单介绍
char * strcat ( char * destination, const char * source )
源字符串必须以 ‘\0’ 结束.
目标空间必须有足够的大,能容纳下源字符串的内容.
目标空间必须可修改.
另一种实现方式
#include<stdio.h>
#include<string.h>
#include<assert.h>
void my_strcat( char* arr1, const char* arr2,int n)
{
char* p = arr1;
char* q =(char *)arr2;
assert(arr1);
assert(arr2);
p = p + n;
while( *q!= '\0')
{
*p = *q;
p++;
q++;
}
*p = *q;
printf("%s\n",arr1);
}
int main()
{
char arr1[32]="I am a";
const char arr2[]=" good boy!";
int n=strlen(arr1);
my_strcat(arr1,arr2,n);
return 0;
}