strncmp,strncat和strncpy的模拟实现

本文详细介绍了C语言中常用的字符串处理函数,包括strncmp用于比较两个字符串的前n个字符、strncat用于连接两个字符串以及strncpy用于复制字符串。通过具体的代码示例,帮助读者更好地理解和掌握这些函数的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.strncmp
函数原型:char*strncmp(char*str1, const char *str2, size_t n)
函数功能:strncpy用来比较str1和str2字符串的前n个字符。如果两个字符串相等,strncmp返回0。
strncmp()函数比较指定size个字符,如果字符串str1和str2的前size个字符相同,函数返回0;
字符串比较的大小是由ASCII码表上的顺序决定,这个顺序也是字符值。
strncmp()首先将str1的第一个字符值减去str2的第一个字符值,
若差值为0,则继续比较下一个字符,直到遇到字符结束标志'\0', 若差值不为0,则将差值返回。
注意:要比较的字符串包括'\0', 一旦遇到'\0'结束比较,无论n为多少,不再继续比较。
例如"Ac""ba"比较会返回字符"A(65)""b(98)"的差值( - 33)。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
char my_strncmp(const char*str1, const char*str2, int count)
{
        assert(str1 != NULL);
        assert(str2 != NULL);
        while (*str1 == *str2)
        {
               if ((*str1 == '\0') || (*str2 == '\0'))
                       return 0;
               str1++;
               str2++;
               count--;
        }
        if (*str1>*str2)
               return 1;
        else if (*str1 < *str2)
               return -1;
        else
               return 0;
}
int main(void)
{
        int ret = 0;
        char arr1[] = "Ac";
        char arr2[] = "ba";
        ret = my_strncmp(arr1, arr2, 4);
        printf("%d\n", ret);
        system("pause");
        return 0;
}

2.strncat
函数原型:char*strncat(char*dest, const char*src, size_t n)
函数功能:把src的前n个字符添加到dest 所指的字符串的结尾处,
并覆盖dest所指字符串的'\0', 从而实现字符串的链接。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
char*my_strncat(char*dest, char*src, size_t num)
{
        assert(dest != NULL);
        assert(src != NULL);
        char*ret = dest;
        while (*dest)
        {
               dest++;
        }
        while (num&&*src)
        {
               *dest++ = *src++;
        }
        *dest = '\0';
        return ret;
}
int main(void)
{
        char p[100] = "hello";
        char q[] = " world";
        int ret = 0;
        ret = my_strncat(p, q, 20);
        printf("%s\n", ret);
        system("pause");
        return 0;
}


3.strncpy
函数原型:char *strncmp(char*dest, char*src, size_t n)
函数功能:
(1)复制字符串src中的内容(字符,数字,汉字等)到字符串dest中,复制多少由size_t的值决定。
(2)如果src的前n个字符不含NULL字符,则结果不会以NULL字符结束,
(3)如果src>n, 只将src的前n个字符复制到dest中,不自动添加'\0', 也就是说dest中没有'\0',
需要手动添加'\0'.
(4)如果src<n,则以NULL填充到dest中直到复制完n个字节。
注意:src和dest所指的区域不能重叠,而且dest必须要有足够的空间来容纳src的字符 + '\0'

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
char*my_strncpy(char*dest, const char*src, size_t num)
{
        assert(dest != NULL);
        assert(src != NULL);
        while (num && (*dest++ = *src++))
        {
               num--;
        }
        if (num > 0)
        {
               while (num--)
               {
                       *dest = '\0';
               }
        }
        return dest;
}
int main(void)
{
        char arr1[20];
        char p = "abcdef";
        my_strncpy(arr1, p, 10);
        printf("%s\n", arr1);
        system("pause");
        return 0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值