实现strlen、strcpy、strncpy、strcat、strncat
cpp
#include <stdio.h>
size_t my_strlen(const char *src)
{
size_t len = 0;
while (*src != '\0')
{
len++;
src++;
}
return len;
}
char *my_strcpy(char *dest, const char *src)
{
if (dest == NULL || src == NULL) // 判断输入的字符是否为空
{
return NULL; // 如果为空,就返回空
}
char *temp = dest; // 将dest的地址赋值给一个临时变量
while (*src != '\0') // 遍历要拷贝的字符
{
*temp = *src; // 将src的值赋给temp
src++; // src地址后移
temp++; // temp地址后移
}
*temp = '\0'; // 最后一位为\0
return dest; // 返回dest
}
char *my_strncpy(char *dest, const char *src, size_t n)
{
if (dest == NULL || src == NULL)
{
return NULL;
}
char *temp = dest;
size_t i;
for (i = 0; (i < n) && (*src != '\0'); i++)
{
*temp = *src;
src++;
temp++;
}
for (; i < n; i++)
{
*temp = '\0';
}
return dest;
}
char *my_strcat(char *dest, const char *src)
{
if (dest == NULL || src == NULL)
{
return NULL;
}
char *temp = dest;
while (*temp != '\0')
{
temp++;
}
while (*src != '\0')
{
*temp = *src;
temp++;
src++;
}
*temp = '\0';
return dest;
}
char *my_strncat(char *dest, const char *src, size_t n)
{
if (dest == NULL || src == NULL)
{
return NULL;
}
char *temp = dest;
while (*temp != '\0')
{
temp++;
}
size_t i;
for (i = 0; (i < n) && (*src != '\0'); i++)
{
*temp = *src;
src++;
temp++;
}
for (; i < n; i++)
{
*temp = '\0';
}
return dest;
}
int main()
{
char dest[100] = "Hello World";
char src[100] = "Hello World";
// char *result1 = my_strcpy(dest, src);
// char *result2 = my_strncpy(dest, src, 3);
// size_t result = my_strlen(src);
// char *result3 = my_strcat(dest, src);
char *result4 = my_strncat(dest, src, 3);
// printf("%s\n", result1);
// printf("%s\n", result2);
// printf("%ld\n", result);
// printf("%s\n", result3);
printf("%s\n", result4);
return 0;
}