时间:2023-01-14 11:32:24 | 栏目:C代码 | 点击:次
strcat函数详解如下
char* __cdecl strcat (char * dst, const char * src);
这里是库函数里面的函数定义接口。这个函数是将字符串src连接到dst中去,就是连接字符串函数。
分析:
1、dst 和 src 字符串结尾都必须含有 ’ \0 ';
2、dst 字符串是可变的,不能用 const 修饰;src 可以用 const 修饰。
3、就是 dst 目标字符串的空间必须足够大。
4、该函数返回值是字符指针类型。
代码展示如下:
int main() { char ch1[20] = "Hello"; char ch2[] = "World"; strcat(ch1, ch2); printf("%s\n", ch1); return 0; }
图解分析:
strcat函数连接前:
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 }
分析:
1、这里 dst 就没有用 const 修饰,而 src 就可以用 const 修饰。
2、这里定义一个新的字符指针 cp 指向 dst 起始位置,然后 cp 开始循环操作,dst 这个指针始终指向字符串开头,最终返回 dst 指向的字符串。
3、先要找目标空间那个起始字符串的尾部,然后再在后面连接。
4、while((*cp++ = *src++) != ‘\0’) ; 这一句就以最简洁的代码实现字符串连接。
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