彻底掌握C语言strcat函数的用法
strcat函数详解如下
1.函数介绍
1.1.函数接口
char* __cdecl strcat (char * dst, const char * class="lazy" data-src);
这里是库函数里面的函数定义接口。这个函数是将字符串class="lazy" data-src连接到dst中去,就是连接字符串函数。
1.2.函数分析
分析:
1、dst 和 class="lazy" data-src 字符串结尾都必须含有 ’ \0 ';
2、dst 字符串是可变的,不能用 const 修饰;class="lazy" data-src 可以用 const 修饰。
3、就是 dst 目标字符串的空间必须足够大。
4、该函数返回值是字符指针类型。
1.3.函数的简单使用
代码展示如下:
int main()
{
char ch1[20] = "Hello";
char ch2[] = "World";
strcat(ch1, ch2);
printf("%s\n", ch1);
return 0;
}
图解分析:
strcat函数连接前:
strcat函数连接后:
2.库函数strcat源代码
char * __cdecl strcat (char * dst, const char * class="lazy" data-src)//__cdecl:是函数调用约定
{
char * cp = dst;
while( *cp )
cp++; //find end of dst
while((*cp++ = *class="lazy" data-src++) != '\0') ; //Copy class="lazy" data-src to end of dst
return( dst ); //return dst
}
库函数分析
分析:
1、这里 dst 就没有用 const 修饰,而 class="lazy" data-src 就可以用 const 修饰。
2、这里定义一个新的字符指针 cp 指向 dst 起始位置,然后 cp 开始循环操作,dst 这个指针始终指向字符串开头,最终返回 dst 指向的字符串。
3、先要找目标空间那个起始字符串的尾部,然后再在后面连接。
4、while((*cp++ = *class="lazy" data-src++) != ‘\0’) ; 这一句就以最简洁的代码实现字符串连接。
3.模拟实现 strcat 函数
模拟实现
char* my_strcat(char* str1, const char* str2)
{
char* first = str1;
assert(str1 && str2);
//目标空间的'\0'
while (*str1 != '\0')
{
str1++;
}
//追加内容到目标空间
while (*str1++ = *str2++)
{
;
}
return first;
}
int main()
{
char ch1[20] = "Hello";
char ch2[] = "World";
printf("%s\n", my_strcat(ch1, ch2));//这里包含链式访问
return 0;
}
总结分析
1、这是模拟实现strcat函数,里面相关的细节和源代码中的相同。
2、链式访问:就是把一个函数的返回值当作另一个函数的参数来使用,就是链式访问。
写在后面
友友们,相聚的时刻总是短暂的,又到了说再见的时候啦~ 但是字符串这一块经常在面试的时候会出模拟实现某某字符串函数的面试题,因此我们不能只会平时利用头文件直接调用而不去摸清原理哈~ 要做到 摸清、拿捏、吃透 字符串函数。
以上代码均可运行,所用编译环境为 vs2019 ,运行时注意加上编译头文件#define _CRT_SECURE_NO_WARNINGS 1
到此这篇关于彻底掌握C语言strcat函数的用法的文章就介绍到这了,更多相关C语言strcat函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341