- 一、模拟实现字符函数(strlen,strcpy,strcat,strcmp)
- (1)模拟实现strlen
- (2)模拟实现strcpy
- (3)模拟实现strcat
- (4)模拟实现strcmp
- 二、模拟实现内存函数(strstr、memcpy、memmove)
- (1)模拟实现strstr
- (2)模拟实现memcpy
- (3)模拟实现memmove
#include(2)模拟实现strcpyint my_strlen(char* p) { int num = 0; while(*p!=' ') { num++; p++; } return num; } int main() { char arr[] = "abcdef"; int ret = my_strlen(arr); printf("%d", ret); return 0; }
#include(3)模拟实现strcat#include void my_strcpy(char* dest,const char* src) { assert(dest && src); while(*dest++=*src++) { ; } } int main() { char arr1[] = "abcddd"; char arr2[10] = { 0 }; my_strcpy(arr2, arr1); printf("%sn", arr2); return 0; }
char* my_strcat(char* dest,const char*src)
{
char* ret = dest;
while(*dest)
{
dest++;
}
while (*dest++ = *src++)
;
return ret;
}
int main()
{
char arr1[10] = "abcd";
strcat(arr1, "zhu");
printf("%sn", arr1);
return 0;
}
(4)模拟实现strcmp
int my_strcmp(char* str1,char* str2)
{
assert(str1 && str2);
while (*str1 == *str2)
{
if (*str1 == ' ')
return 0;
str1++;
str2++;
}
if (*str1 > *str2)
return 1;
else
return -1;
}
int main()
{
char arr1[] = "abcd";
char arr2[] = "abcd";
int ret = my_strcmp(arr1, arr2);
printf("%d", ret);
return 0;
}
二、模拟实现内存函数(strstr、memcpy、memmove)
(1)模拟实现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==*s2&&*s1!=' '&&*s2!=' ')
{
s1++;
s2++;
}
if(*s2==' ')
{
return p;
}
p++;
}
return NULL;
}
int main()
{
char arr1[] = "zhucheng666";
char arr2[] = "en";
char* ret = my_strstr(arr1, arr2);
printf("%sn", ret);
return 0;
}
(2)模拟实现memcpy
my_memcpy(void* dest,const void* src,int num)
{
void* ret = dest;
while (num--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest+1;
src = (char*)src + 1;
}
return ret;
}
int main()
{
int arr1[] = { 1,2,3,4,5 };
int arr2[10] = { 0 };
my_memcpy(arr2, arr1, 8);
int i = 0;
for (i = 0; i < 2; i++)
printf("%d ",arr2[i]);
return 0;
}
(3)模拟实现memmove
void *my_memmove(void* dest,const void*src,size_t num)
{
assert(dest && src);
void* ret = dest;
if(dest后
{
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;
}
以上就是最基本字符函数和内存函数的实现原理呀,大家可以学习一下,深刻理解,这样才能更好地运用!



