学习目标:
学习字符串库函数
学习内容:
1.1字符串库函数
1.1.1 strcmp
str1和str2中的内容挨个相比较,只要有一个元素比较出大小,就返回相应的值。
str1 == str2 返回 0
str1 > str2 返回 正数
str1 < str2 返回 负数
strcmp的使用例子:
strcmp的模拟实现:
int my_strcmp(const char* str1,const char* str2) { assert(str1 && str2); while ( *str1 == *str2) { if (*str1 == '\0') return 0; str1++; str2++; } if (*str1 > *str2) return 1; else if (*str1 < *str2) return -1; }
1.1.2 strlen
顾名思义就是求字符串的长度,遇到 \0 结束
strlen的模拟实现:
size_t my_strlen(const char* str) { assert(str); char* ptr = str; while (*str) { str++; } return str - ptr; } void test4() { char* s = "abcdefg"; int ret = my_strlen(s); printf("%d\n", ret); }
1.1.3 strcpy
注意:
Copies the C string pointed by source into the array pointed by destination, including the terminating null character (and stopping at that point).
源字符串必须以 '\0' 结束。
会将源字符串中的 '\0' 拷贝到目标空间。
目标空间必须足够大,以确保能存放源字符串。
目标空间必须可变。
strcpy的模拟实现:
char* my_strcpy(char* dest, const char* src) { assert(src && dest); char* ret = dest; while (*dest++ = *src++) { ; } return ret; } void test5() { char s[] = "abcdefg"; char ss[20] ={0}; my_strcpy(ss, s); printf("%s\n", ss); }
2.1 内存函数的介绍
2.1.1 memcpy
memcpy的使用:
memcpy的模拟实现:
void* my_memcpy(void* dest, const void* src, size_t count) { void* ptr = dest; assert(dest && src); while (count--) { *(char*)dest = *(char*)src; dest = (char*)dest + 1; src = (char*)src + 1; } return ptr; }
2.1.2 memmove
memmove的使用例子:
memmove的模拟实现:
分析:
代码模拟实现:
void* my_memmove(void* dest,const void* src,size_t size) { void* ret = dest; if (dest < src)//从前往后 { while (size--) { *(char*)dest = *(char*)src; dest = (char*)dest + 1; src = (char*)src + 1; } } //从后往前 else { while(size--) *((char*)dest+size) = *((char*)src+size); } return ret; }
学习时间:
二零二二年十月
学习产出:
- 技术笔记 1 遍
- CSDN 技术博客 1 篇
- 习的 vlog 视频 1 个