模拟实现strncpy、strncat、strncmp长度受限制的字符串函数

模拟实现strncpy函数

char* my_strncpy(char *dest, const char *src,int num)
my_strncpy函数有三个参数:
dest类型为char*,用于接收目标字符串的首地址;
src类型为const char*,用于接收源字符串的首地址;
num类型为int,用于接收要改变的字符的个数。
函数返回类型为char*,返回目标字符串的首地址。

char* my_strncpy(char *dest, const char *src,int num)
{
    char *ret = dest;
    assert(dest && src);
    while(num)
    {
        *dest++ = *src++;
        num--;
    }
    return ret;
}
模拟实现strncat函数

char *my_strncat(char *dest, const char *src, int num)
my_strncat函数有三个参数:
dest类型为char*,用于接收目标字符串的首地址;
src类型为const char*,用于接收源字符串的首地址;
num类型为int,用于接收要连接的字符的个数。
函数返回类型为char*,返回目标字符串的首地址。

char *my_strncat(char *dest, const char *src, int num)
{
    char *ret = dest;
    assert(dest && src);
    while(*dest++ != '\0')
        ;
    dest--;
    while(num)
    {
        *dest++ = *src++;
        num--;
    }
    return ret;
}
模拟实现strncmp函数

int my_ strncmp(const char *s1, const char *s2, size_t num)
my_strncmp函数有三个参数:
s1的类型为const char*,用于接收第一个字符串的首地址;
s2的类型为const char*,用于接收第二个字符串的首地址;
num的类型为size_t,用于接收要比较的字符的个数。
函数返回类型为int类型:若s1>s2,返回1;若s1=s2,返回0;若s1

int my_strncmp(const char *s1, const char *s2, size_t num)
{
    int ret = 0;
    while(num-- && !(ret=*(unsigned char *)s1-*(unsigned char *)s2))
    {
        ++s1;
        ++s2;
    }
    if(ret<0)
        return -1;
    else if(ret>0)
        return 1;
    return (ret);
}

猜你喜欢

转载自blog.csdn.net/cottonrose_orange/article/details/81516590