一文吃透strcat函数
年轻是我们唯一拥有权利去编织梦想的时光!💓💓💓
文章目录
-
- •🌙写在前面
- • 🍋1.函数介绍
-
- • 🌰1.1.函数接口
- • 🌰1.2.函数分析
- • 🌰1.3.函数的简单使用
- • 🍋2.库函数strcat源代码
-
- • 🌰2.1.库函数分析
- • 🍋3.模拟实现 strcat 函数
-
- • 🌰3.1.模拟实现
- • 🌙写在后面
•🌙写在前面
💖💖💖Hello,大家好啊,我是vince,小白一名,撰写博客::⭐️一为更好的锻炼自己,巩固知识;:⭐️二为和大家一起在代码的海洋里探索。
如果大家感兴趣的话 ——🎉🎉🎉 欢迎关注csdn博客:,我们互相学习,共同进步哈~🌟
今天vince将和大家一起去一一吃透字符串函数,接下来我将一篇文章介绍一个函数,这样大家在学习时也不会因为文章过长而劳累厌倦。☀️
🎉🎉🎉strcat函数详解如下🎉🎉🎉
• 🍋1.函数介绍
• 🌰1.1.函数接口
char* __cdecl strcat (char * dst, const char * src);
这里是库函数里面的函数定义接口。这个函数是将字符串src连接到dst中去,就是连接字符串函数。
• 🌰1.2.函数分析
💯分析:
1、dst 和 src 字符串结尾都必须含有 ’ \0 ';
2、dst 字符串是可变的,不能用 const 修饰;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 * src)//__cdecl:是函数调用约定{char * cp = dst;while( *cp )cp++; //find end of dst while((*cp++ = *src++) != '\0') ;//Copy src to end of dst return( dst ); //return dst }
• 🌰2.1.库函数分析
💯 分析:
1、这里 dst 就没有用 const 修饰,而 src 就可以用 const 修饰。
2、这里定义一个新的字符指针 cp 指向 dst 起始位置,然后 cp 开始循环操作,dst 这个指针始终指向字符串开头,最终返回 dst 指向的字符串。
3、先要找目标空间那个起始字符串的尾部,然后再在后面连接。
4、while((*cp++ = *src++) != ‘\0’) ; 这一句就以最简洁的代码实现字符串连接。
• 🍋3.模拟实现 strcat 函数
• 🌰3.1.模拟实现
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、链式访问:就是把一个函数的返回值当作另一个函数的参数来使用,就是链式访问。
• 🌙写在后面
友友们,相聚的时刻总是短暂的,又到了说再见的时候啦~ 🐳 但是字符串这一块经常在面试的时候会出模拟实现某某字符串函数的面试题,因此我们不能只会平时利用头文件直接调用而不去摸清原理哈~ 🐬要做到 摸清、拿捏、吃透 字符串函数。✨✨✨
代码不负有心人,98加满,向前冲啊🐬
🎉🎉🎉以上代码均可运行,所用编译环境为 vs2019 ,运行时注意加上编译头文件#define _CRT_SECURE_NO_WARNINGS 1