不调用库函数模拟实现strlen()、strcpy()、strcat()、memcpy()
【代码】不调用库函数模拟实现strlen()、strcpy()、strcat()、memcpy()
·
1、my_strlen()
1.1 计数器
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int my_strlen(const char * str)
{
if(str == NULL)
{
printf("str NULL");
return -1;
}
int count = 0; //计数器
char *p = (char*)malloc(strlen(str) + 1);
strcpy(p,str);
while(*p != '\0')
{
++count;
++p;
}
return count;
}
int main()
{
int count = my_strlen("abcd");
printf("str counnt = %d\n", count);
return 0;
}
1.2 递归函数
int my_strlen(const char * str)
{
if(str == NULL)
{
printf("str NULL");
return -1;
}
if(*str == '\0')
return 0;
else
return 1 + my_strlen(str + 1);
}
1.3 指针运算
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int my_strlen(const char * str)
{
if(str == NULL)
{
printf("str NULL");
return -1;
}
char *p = (char*)malloc(strlen(str) + 1);
strcpy(p,str);
char *p1 = p;
while(*p != '\0')
{
++p;
}
return p - p1;
}
int main()
{
int count = my_strlen("abcd");
printf("str counnt = %d\n", count);
return 0;
2、my_strcpy()
#include <stdio.h>
#include <assert.h>
char* my_strcpy(char * dest, const char *src)
{
assert(dest && src);
char *ret = dest; //保存dest字符串的首地址,后续++的规程中,dest的指向后移
while(*dest++ = *src++);
return ret;
}
int main()
{
char str1[] = "**************";
char str2[] = "hello";
printf("%s\n",my_strcpy(str1, str2));
return 0;
}
3、my_strcat()
#include <stdio.h>
#include <assert.h>
#include <string.h>
char* my_strcat(char * dest, const char *src)
{
assert(dest && src);
char *ret = dest; //保存dest字符串的首地址,后续++的规程中,dest的指向后移
int len = strlen(dest);
// while(dest[len++] = *src++);
while(*(dest+len++) = *src++);
return ret;
}
int main()
{
char str1[] = "hello";
char str2[] = "world";
printf("%s\n",my_strcat(str1, str2));
return 0;
}
5、my_memcpy()
#include <stdio.h>
#include <assert.h>
#include <string.h>
void* my_memcpy(void* dest, const void* src, size_t num)
{
assert(dest && src);
for (int i = 0; i < num; i++)
{
*((char*)dest + i) = *((char*)src+i);
}
return dest;
}
int main()
{
char str1[10];
char str2[] = "hello";
my_memcpy(str1, str2, sizeof(char) * 3);
printf("%s\n", str1);
return 0;
}
更多推荐
所有评论(0)