模拟实现strcpy函数
strcpy--字符串拷贝函数
此函数返回目标空间的起始地址
已知 char *strcpy(char *dest, const char *src)
此函数参考源码与所示代码类似,故不再赘述
#include<stdio.h> #include<assert.h> char* id_strcpy(char* dest, const char* src) //加了const可使原数组不被目标数组覆盖(即防止顺序颠倒),const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的 { assert(src != NULL);//断言 若为空指针可快速发现 assert(dest != NULL); char* ret = dest;//定义一个指针变量存放目标的地址 while (*dest++ = *src++)//这样写的巧妙之处在于既可以赋值,又可以使循环停止 { ; } return ret; } int main() { char arr1[] = "#############"; char arr2[] = "hello"; 函数返回目标数组地址, printf("%s", id_strcpy(arr1, arr2));//链式访问 return 0; }
模拟实现strlen函数,此函数求字符串长度
//size_t strlen ( const char * str );
参考源码
size_t __cdecl strlen ( const char * str) { const char* eos = str; while (*eos++);//当*eos!='\0'时,自加,直到*eos='\0',但此时又自加了一次,故eos指向\0后面那个位置 return(eos - str - 1);//指针减指针减去str的基础上再把自加减掉 }
模拟写法 源码
#include<stdio.h> #include<assert.h> int my_strlen(const char* str) { assert(str); int count = 0; while (*str != '\0') { count++; str++; } return count; } int main() { char arr[] = "abc"; printf("%d", my_strlen(arr)); return 0; }