网站群内容管理系统的设计与实现,ui设计师证,微信商城网站开发,山东锦华建设集团有限公司网站哈喽#xff0c;小伙伴们#xff0c;我们又见面了#xff0c;上次讲完strlen函数的模拟实现后#xff0c;发现还比较受大家欢迎#xff0c;因此#xff0c;本次给大家带来模拟函数的完结篇。温馨提示#xff1a;本篇文章将会涉及到可能还未学到的实用性较高的库函数哟。…哈喽小伙伴们我们又见面了上次讲完strlen函数的模拟实现后发现还比较受大家欢迎因此本次给大家带来模拟函数的完结篇。温馨提示本篇文章将会涉及到可能还未学到的实用性较高的库函数哟。当然答应大家的小福利也会放在本篇文章的末尾哦。
那么我们开始上课 首先我们先来讲讲字母拼接的函数
stract函数作用拼接字符串
目标将两个数组的字符串拼接到一起。
运行原理先找到要拼接的数组字符串的\0其次用赋值的符号拼接上去。
上代码
char my_stract(char* dest, char* str) { char* ret *dest; assert(dest str);//防止是空指针 while (*dest ! \0)//找到arr1的\0 { dest; } while (*dest *str)//把arr2的字符串赋值给arr1 { ; } return ret; } //stract:拼接 int main() { char arr1[20] abcdefg; char arr2[20] hijklmn; my_stract(arr1, arr2); printf(%s,arr1); return 0; }
strcpy函数作用拷贝复制
运行原理先将\0前面的字符串以赋值的方式传递给另一个变量再将\0传过去
char my_strcpy(char* dest, const char* str, size_t num) { char* ret *dest; assert(dest str); while (*str ! \0)//\0前面的字符串通过循环的方式赋值给另一个变量 { *dest *str; dest; str; } if (*str \0)//将\0传过去 { *dest *str; } return ret; } int main() { char arr1[20] hellobite; char arr2[20] { 0 }; my_strcpy(arr2, arr1, 9); printf(%s, arr2); return 0; }
strcmp函数
作用比较字符串的大小
运行原理根据ASCLL码值进行比较大小大于则返回大于的数小于则返回小于的数等于则返回0
第一种
int my_strcmp(const char* str1,const char* str2) { assert(*str1* str2); while (*str1 *str2) { if (*str1 \0 *str2 \0) return 0; str1; str2; } if (*str1 *str2) //strcmp:比较字符串的内容大小 { return 1; } if (*str1 *str2) return -1; } int main() { char arr1[] abcdefghijklmn; char arr2[] abcdefghijklmn; int retmy_strcmp(arr1, arr2); printf(%d, ret); return 0; }
第二种
int my_strcmp(const char* str1,const char* str2) { assert(*str1* str2); int my_strcmp(const char* str1, const char* str2) { assert(*str1 *str2); return *str1 - *str2;//让两个字符串做差其实是字符串的ASCLL码做的差 } int main() { char arr1[] abcdefghijklmn; char arr2[] abcdefghijklmn; int retmy_strcmp(arr1, arr2); printf(%d, ret); return 0; }
此外还有三个与这仨函数比较像的
strcmp strncmp
strcpy strncpy
stract strnact
这两组函数他们在功能上并没有多大的差别只不过带了n的比不带n的更加安全
strtok函数作用 strtok函数找到str中的下⼀个标记并将其⽤ \0 结尾返回⼀个指向这个标记的指针。注 strtok函数会改变被操作的字符串所以在使⽤strtok函数切分的字符串⼀般都是临时拷⻉的内容 并且可修改。 sterror作用 把参数部分错误码对应的错误信息的字符串地址返回来 memcpy作用复制 memcpy与strcpy区别memcpy是根据字节数来确定复制的量 void my_memcpy(const void* dest,const void* str, size_t num) { assert(dest str); void* ret dest; while (num--) { *(char*)dest *(char*)str;//因为20是字节数并且char类型字节数是1符合我们的目标所以强转为char型 dest (char*)dest 1;//赋值完后字节数1直至num0 str (char*)str 1; } return ret; } int main() { int arr1[] { 1,2,3,4,5,6,7,8,9,10 }; int arr2[20] { 0 }; my_memcpy(arr2, arr1, 20);//20是字节 for (int i 0;i 20;i) { printf(%d , arr2[i]); } return 0; } 温馨提示 如果起始位置和终点位置有任何的重叠复制的结果都是未定义的。 那么这时候不得不提到memmove这个函数 首先我们先讲一下它们的区别如果起始位置和终点位置有任何的重叠复制的结果都是未定义的。而是memmove函数处理的源内存块和⽬标内存块是可以重叠的。 # include stdio.h # include string.h void * memmove ( void * dst, const void * src, size_t count) { void * ret dst; if (dst src || ( char *)dst (( char *)src count)) { while (count--) { *( char *)dst *( char *)src; dst ( char *)dst 1 ; src ( char *)src 1 ; } } else { dst ( char *)dst count - 1 ; src ( char *)src count - 1 ; while (count--) { *( char *)dst *( char *)src; dst ( char *)dst - 1 ; src ( char *)src - 1 ; } } return (ret); } int main () { int arr1[] { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 }; memmove(arr1 2 , arr1, 20 ); int i 0 ; for (i 0 ; i 10 ; i) { printf ( %d , arr2[i]); } memset函数作用将内存中的值以字节为单位设置成想要的内容 # include stdio.h # include string.h int main () { char str[] hello world ; memset (str, x , 6 ); printf (str); return 0 ; } 最后输出的结果应该是xxxxxxworld 今天的内容到这里就要结束了那么我先前说过的奖励当然给到大家 stract - C Search results (cplusplus.com) 这个网址可以查询到各种库函数的头文件以及作用 那么我们下期再见