////strcat(字符串追加)——>头文件:<string.h>
// strcat的功能就是:1.先找到目标字符串的结尾(\0)然后进行2.strcpy拷贝
// char* strcat(char* destination,const char* source)//括号里为两个地址,返回类型char*
//destination目的地 source源头,把源头的数据追加到目的地空间的末尾,\0不追加过去!!!!!
//1.源字符串必须以 '\0' 结束。
//2.目标空间必须有足够的大,能容纳下源字符串的内容。
//3.目标空间必须可修改。
//4.字符串不可以自己给自己追加
//5.strcat拷贝时,不会将源数据内容的\0追加过去
//6.模拟实现strcat
////1.2.3.
//#include<stdio.h>
//int main()
//{
// char arr[20] = "hellow ";//目的地数据中含有两个空格,追加时并不会覆盖空格,并且打印时也会照常打印
// strcat(arr,"world");//源数据"world"中包含\0,但是追加时不会追加到目的地数据中。
// printf("%s\n",arr);
// return 0;
//}
////4.自己给自己追加(会覆盖自己,导致栈溢出和越界)
////两个指针同时操作一个字符串,当*dest找到 '\0' 之后,*src开始追加,当追加完一个字符后,
// *src往后走一位,*dest指向的 '\0'被覆盖,*dest就必须往后走一位,找到下一个'\0',
// 找到之后*src又开始追加,不断重复,导致程序崩溃。
//#define _CRT_SECURE_NO_WARNINGS 1
//#include<stdio.h>
//#include<string.h>
//#include<assert.h>
//char* my_strcat(char* dest, const char* src)
//{
// char* ret = dest;//保存首字符地址
// assert(dest && src);
// while (*dest++ != '\0')//1.找dest中\0的位置
// {
// dest++;
// }
// while (*dest++ = *src++)
// //2.此时的*dest++指的位置已经是\0的位置了,++即开始将源数据(*src++)追加(或拷贝)到目标的末尾处
// {
// ;
// }
// return ret;
//}
//int main()
//{
// char arr[20] = "hellow ";//目的地数据中含有两个空格,追加时并不会覆盖空格,并且打印时也会照常打印
// strcat(arr,arr);//源数据"world"中包含\0,但是追加时不会追加到目的地数据中。
// printf("%s\n", arr);
// return 0;
//}
////6.模拟实现strcat
//#define _CRT_SECURE_NO_WARNINGS 1
//#include<stdio.h>
//#include<string.h>
//#include<assert.h>
//char* my_strcat(char* dest, const char* src)
//{
// char* ret = dest;//保存首字符地址
// assert(dest && src);
// while (*dest++ != '\0')//1.找dest中\0的位置
// {
// dest++;
// }
// while (*dest++ = *src++)
// //2.此时的*dest++指的位置已经是\0的位置了,++即开始将源数据(*src++)追加(或拷贝)到目标的末尾处
// {
// ;
// }
// return ret;
//}
//int main()
//{
// char arr[20] = "hellow ";//目的地数据中含有两个空格,追加时并不会覆盖空格,并且打印时也会照常打印
// strcat(arr, "world");//源数据"world"中包含\0,但是追加时不会追加到目的地数据中。
// printf("%s\n", arr);
// return 0;
//}
标签:arr,函数,dest,strcat,C语言,char,++,追加 From: https://blog.51cto.com/KKhahaha/8945867