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

相关推荐

  1. 字符串函数strncpy、strncat、strncmp功能3

    2024-01-27 21:42:03       65 阅读
  2. C++实现字符串修剪(Trim)函数功能

    2024-01-27 21:42:03       53 阅读
  3. 字符串函数

    2024-01-27 21:42:03       36 阅读
  4. 字符函数字符串函数

    2024-01-27 21:42:03       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-27 21:42:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-27 21:42:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-27 21:42:03       82 阅读
  4. Python语言-面向对象

    2024-01-27 21:42:03       91 阅读

热门阅读

  1. Android中C++层fstream用法详解

    2024-01-27 21:42:03       47 阅读
  2. CSS--样式穿透

    2024-01-27 21:42:03       65 阅读
  3. Mysql 索引优化

    2024-01-27 21:42:03       62 阅读
  4. K8S、keepalived、haproxy 高可用集群实战

    2024-01-27 21:42:03       47 阅读
  5. CentOS 7 上使用 wget 安装 Nginx 并设置开机自启

    2024-01-27 21:42:03       53 阅读
  6. Dubbo 3.x:探索阿里巴巴的开源RPC框架新技术

    2024-01-27 21:42:03       57 阅读
  7. C#学习笔记_StringBuilder+程序效率测试

    2024-01-27 21:42:03       57 阅读
  8. elasticsearch优化总结

    2024-01-27 21:42:03       42 阅读