Strcat函数和Strncat函数详解
Strcat函数原型
char *strcat( char *strDestination, const char *strSource );
strcat函数的注意事项
- 源字符串必须以\0结束
- 目标空间必须足够大,能容纳下源字符串的内容
- 目标空间必须可修改
模拟实现strcat
#include<stdio.h>
#include<assert.h>
char* my_strcat(char* dest, const char* source)
{
//字符串的连接首先要找到目标字符串的\0,然后在去追加,一共分为两步
char* ret = dest;
assert(dest != NULL);
assert(source != NULL);
while (*dest != '\0')
{
dest++;
}
while (*dest++ = *source++)
{
;
}
return ret;
}
int main()
{
char arr1[20] = "hello ";
my_strcat(arr1, "world");
printf("%s", arr1);
return 0;
}
思考:字符串可以连接字符串本身吗?
答案是不可以的;
因为:字符串自己连接自己是不可行的,自己连接自己的话就会覆盖掉\0,这样程序就找不到终止的标志,会一直继续,达成死循环,最终程序崩溃
strncat的函数原型
char *strncat( char *strDest, const char *strSource, size_t count );
库函数下的strncat
#include<stdio.h>
int main()
{
char arr1[30] = "hello world";
char arr2[] = "change world";
strncat(arr1, arr2, 3);
printf("%s", arr1);
return 0;
}
//追加的时候要主动放一个\0过去
//如果希望追加的字符个数大于我字符串本身的个数的话,不会再像后面追加0.只会链接我字符串本身的长度,然后放一个\0,别的什么操作都没有
模拟实现strncat
#include<stdio.h>
#include<assert.h>
char* my_strncat(char* dest, const char* src,int n)
{
char* ret = dest;
assert(dest);
assert(src);
char* p = dest;
while(*p != 0)
{
p++;
}
while(n--)
{
*p++ = *src++;
}
*p = 0; //主动追加一个\0就字符串连接了。
return ret;
}
int main()
{
char arr1[30] = "hello world";
char arr2[] = "change world";
my_strncat(arr1, arr2, 3);
printf("%s", arr1);
return 0;
}