下文为strlen, strcpy, strcat, strcmp, strstr, memcpy, memmove的函数模拟实现,以帮助更加了解相关函数的底层逻辑
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
//strlen的模拟实现
//size_t my_strlen(const char* str)
//{
// size_t count = 0;
// assert(str);
// while (*str != '\0')
// {
// count++;
// str++;
// }
// return count;
//}
//int main()
//{
// char arr[] = { "abcdef" };
// size_t len = my_strlen(arr);
// printf("%u", len);
// return 0;
//}
//strcpy的模拟实现
//char* my_strcpy( char* dest, const char* src)
//{
// assert(dest && src);
// char* ret = dest;
// while (*dest++ = *src++);
// return ret;
//}
//int main()
//{
// char arr1[20] = { 0 };
// char arr2[] = { "hello world" };
// my_strcpy(arr1, arr2);
// printf("%s", arr1);
// return 0;
//}
//
//
// strcat 的模拟实现
//char* my_strcat(char* dest, const char* src)
//{
// char* ret = dest;
// assert(dest && src);
// while (*dest != '\0')
// {
// dest++;
// }
// while (*dest++ = *src++);
// return ret;
//}
//int main()
//{
// char arr1[20] = { "hello " };
// my_strcat(arr1, "world");
// printf("%s", arr1);
// return 0;
//}
//strcmp的模拟实现
//int my_strcmp(const char* str1, const char* str2)
//{
// assert(str1 && str2);
// while (*str1 == *str2)
// {
// if (*str1 == '\0')
// return 0;
// str1++;
// str2++;
// }
// return(*str1 - *str2);
//}
//int main()
//{
// char arr1[20] = "zhangsan";
// char arr2[] = "zhangsa";
// int ret = my_strcmp(arr1, arr2);
// if (ret < 0)
// printf("<\n");
// else if (ret == 0)
// printf("==\n");
// else
// printf(">\n");
// return 0;
//
//}
//
//
//模拟实现strstr
//char* my_strstr(const char* str1, const char* str2)
//{
// assert(str1 && str2);
// const char* s1 = str1;
// const char* s2 = str2;
// const char* p = str1;
// while (*p)
// {
// s1 = p;
// s2 = str2;
// while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
// {
// s1++;
// s2++;
// }
// if (*s2 == '\0')
// {
// return (char*)p;
// }
// p++;
// }
//}
//int main()
//{
// char email[] = "zll@qq.com";
// char substr[] = "qq";
// char* ret = my_strstr(email, substr);
// if (ret == NULL)
// {
// printf("该子串不存在\n");
// }
// else
// printf("%s", ret);
// return 0;
//}
//模拟实现memcpy
//void* my_memcpy(void* dest, const void* src, size_t num)
//{
// assert(dest && src);
// void* ret = dest;
// while (num--)
// {
// *(char*)dest = *(char*)src;
// dest = (char*)dest + 1;
// src = (char*)src + 1;
// }
// return ret;
//}
//int main()
//{
// int arr1[10] = { 0,1,2,3,4,5,6,7,8,9 };
// int arr2[20] = { 0 };
// my_memcpy(arr2, arr1, 20);
// for (int i = 0; i < 5; i++)
// {
// printf("%d ", arr2[i]);
// }
// return 0;
//}
//
//memmove的模拟实现
//void* my_memmove(void* dest, const void* src, size_t num)
//{
// assert(dest && src);
// void* ret = dest;
// if (dest < src)
// {
// while (num--)
// {
// *(char*)dest = *(char*)src;
// dest = (char*)dest + 1;
// src = (char*)src + 1;
// }
// }
// else
// {
// while (num--)
// {
// *((char*)dest + num) = *((char*)src + num);
// }
// }
// return ret;
//}
//
//int main()
//{
// int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
// my_memmove(arr + 2, arr, 20);
// for (int i = 0; i < 10; i++)
// {
// printf("%d ", arr[i]);
// }
// return 0;
//}