字符串函数strncpy、strncat、strncmp的功能(3)

目录

引言: 

一、strncpy函数介绍:

1.声明:

2.功能:

3.底层代码:

二、strnact函数介绍:

1.声明:

2.功能:

3.底层代码:

三、strncmp函数介绍:

1.声明:

2.功能:

3.底层代码:

总结:


引言: 

        strncpy、strncat和strncmp是三个非常常用的字符串函数,它们在字符串的复制、连接和比较方面发挥着重要作用。本文将介绍这三个函数的功能和使用方法。


strcpy、strcat和strcmp函数功能的实现请查看博客:

自我实现——字符串函数strcpy、strcat、strcmp的功能(2)-CSDN博客


一、strncpy函数介绍:

1.声明:

char * strncpy ( char * destination, const char * source, size_t num );

2.功能:

        将原字符串的前num个字符复制到destination。

        如果复制num个字符之前,已到达原字符串的末尾(由null表示),则剩余destination将填充为零,直至总共写入num个字符。

        destination和source的内存存放位置不能重叠,若重叠需考虑其他安全方案替代,如memmove函数,我将在后续介绍内存操作函数时写到

3.底层代码:

char * __cdecl strncpy (char * dest, const char * source, size_t count)
{
        char *start = dest;

        while (count && (*dest++ = *source++) != '\0')    /* copy string */
                count--;

        if (count)                              /* pad out with zeroes */
                while (--count)
                        *dest++ = '\0';

        return(start);
}

二、strncat函数介绍:

1.声明:

char * strncat ( char * destination, const char * source, size_t num );

2.功能:

        char *strncat(char *dest, const char *src, size_t n) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。

3.底层代码:

char * __cdecl strncat (char * front, const char * back, size_t count)
{
        char *start = front;

        while (*front++)
                ;
        front--;

        while (count--)
                if ((*front++ = *back++) == 0)
                        return(start);

        *front = '\0';
        return(start);
}

三、strncmp函数介绍:

1.声明:

int strncmp ( const char * str1, const char * str2, size_t num );

2.功能:

        用于比较两个字符串的前 n 个字符是否相等。

        通常用于比较两个字符串,以确定它们是否相等或哪个字符串在字典顺序上更小。

         int strncmp(const char *str1, const char *str2, size_t n) 把 str1 和 str2 进行比较,最多比较前 n 个字符。

3.底层代码:

int __cdecl strncmp
(
    const char *first,
    const char *last,
    size_t      count
)
{
    size_t x = 0;

    if (!count)
    {
        return 0;
    }

    /*
     * This explicit guard needed to deal correctly with boundary
     * cases: strings shorter than 4 bytes and strings longer than
     * UINT_MAX-4 bytes .
     */
    if( count >= 4 )
    {
        /* unroll by four */
        for (; x < count-4; x+=4)
        {
            first+=4;
            last +=4;

            if (*(first-4) == 0 || *(first-4) != *(last-4))
            {
                return(*(unsigned char *)(first-4) - *(unsigned char *)(last-4));
            }

            if (*(first-3) == 0 || *(first-3) != *(last-3))
            {
                return(*(unsigned char *)(first-3) - *(unsigned char *)(last-3));
            }

            if (*(first-2) == 0 || *(first-2) != *(last-2))
            {
                return(*(unsigned char *)(first-2) - *(unsigned char *)(last-2));
            }

            if (*(first-1) == 0 || *(first-1) != *(last-1))
            {
                return(*(unsigned char *)(first-1) - *(unsigned char *)(last-1));
            }
        }
    }

    /* residual loop */
    for (; x < count; x++)
    {
        if (*first == 0 || *first != *last)
        {
            return(*(unsigned char *)first - *(unsigned char *)last);
        }
        first+=1;
        last+=1;
    }

    return 0;
}

总结:

        strncpy、strncat和strncmp这三个函数在字符串操作中发挥着重要作用,掌握它们的使用方法对于提高编程效率和程序质量具有重要意义。在实际编程过程中,合理运用这些函数,可以有效避免字符串操作中的一些常见错误,提高程序的稳定性和可靠性。 

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值