指针
youfuwenn
所有内容的主要目的是自我学习
展开
-
模拟实现memmove
void* my_memmove(void*dest, void*src, size_t n)//从src指向的字节开始复制n个字节到dest指向的字节处 { char*p = (char*)dest; char*q = (char*)src; while(dest <= src && n--) { *p = *q; p++; q++; } if(dest > src)//当if的条件成立执行的操作不需要操作就不要放在while里。 { .原创 2021-10-29 15:43:22 · 97 阅读 · 0 评论 -
实现memcpy
void* my_memcpy(void* dest,const void* src,size_t num) { char*p = (char*)dest;//因为dest是void*所以不能直接解引用和加加(运算)所以可以先把他赋值给一个char* //然后逐字节赋值。 char*q = (char*)src; while (num--)//num 为多少,就能循环几次。 { *p = *q; p++; q++; } return dest; } int main() { .原创 2021-10-28 22:28:00 · 64 阅读 · 0 评论 -
模拟实现strcmp
int my_strcmp(const char*str1, const char*str2) { assert(str1 && str2); while (*str1 == *str2 && *str1)//第一个元素相等则进入,不相等则直接返回,若只有一个'\0',此时不满足第一个条件。 { str1++; str2++; } return *str1 - *str2; } int main() { int ret = 0; char st.原创 2021-10-28 20:47:59 · 62 阅读 · 0 评论 -
模拟实现strchr
char* my_strchr(const char*str1,const char s) { if (str1 == NULL) //这里不用断言,若碰到空指针就返回NULL就行了。 { return NULL; } while (*str1 != s &&*str1) { str1++; } if (*str1 != '\0') return (char*)str1; else return NULL; } int main() { char str.原创 2021-10-28 16:58:11 · 95 阅读 · 0 评论 -
模拟实现strstr
const char* my_strstr(const char* a,const char* b) { assert(a && b); unsigned int i = 0;//因为下面要和strlen的返回值比较,他的返回值是unsigned int for ( i = 0; i<strlen(a) ;i++) { if ((a[i] == b[0]) && (strncmp(a+i,b,strlen(b)) == 0))//第二个条件可以有效.原创 2021-10-28 16:25:26 · 52 阅读 · 0 评论 -
模拟实现strcat
char* my_strcat(char*dest,const char*src) { char*p = dest; assert(dest && src); //while (*dest++) error dest 先自己加1再返回原来的值进行解引用,所以出循环的时候dest是‘\0’后面元素的地址。 while (dest != '\0') { dest++; } while (*dest++ = *src++)//dest 和 sor先自加1,返回原来的.原创 2021-10-28 08:30:25 · 111 阅读 · 0 评论 -
模拟实现strcpy
void my_strcpy(char*dest,const char*src)//const 有防止把长的字符串拷贝到短的字符窜中,若发生这 种情况程序会崩溃。 { assert(dest != NULL);//若为空指针无法解引用,强行操作代码无法运行 assert(src != NULL); while (*dest++ = *src++)//先赋值再加加,当src = ‘\0’,赋值表达式的值为其asc码值0(因为赋的是‘\0’的按asc码值), .原创 2021-10-27 14:39:07 · 52 阅读 · 0 评论