C语言中的字符串操作函数自定义实现:标准版与限定长度版

       

目录

1. 标准字符串操作函数自定义实现

(a) 自定义strcpy函数

(b) 自定义strcat函数

(c) 自定义strcmp函数

2. 限定长度字符串操作函数自定义实现

(a) 自定义strncpy函数

(b) 自定义strncat函数

(c) 自定义strncmp函数


 对字符串的操作是不可或缺的一部分。标准库提供了如strcpy、strcat、strcmp等基础字符串处理函数,以及它们的“限定长度”版本strncpy、strncat和strncmp。为了深入理解这些函数的工作原理,我们首先将分别展示其标准版自定义实现,然后探讨它们的限定长度版本。

1. 标准字符串操作函数自定义实现


(a) 自定义strcpy函数

char* my_strcpy(char *dest, const char *src) {
    assert(dest != NULL);
    assert(src != NULL);
    char* set = dest;
    while (*dest++ = *src++)
        ;
    return set;
}

my_strcpy函数负责完整地将源字符串src复制到目标字符串dest中,并确保包含结束符\0


(b) 自定义strcat函数

void my_strcat(char *dest, const char *src) {
    char* set = dest;
    while (*dest != '\0') {
        dest++;
    }
    while ((*dest++ = *src++) != '\0')
        ;
    return set;
}

my_strcat函数将源字符串src追加到目标字符串dest的末尾,同样确保结果字符串以\0结束。


(c) 自定义strcmp函数

int my_strcmp(char* dest, char* src) {
    while (*dest == *src) {
        if (*dest == '\0') {
            return 0;
        }
        dest++;
        src++;
    }
    return (*dest > *src) - (*dest < *src);
}

my_strcmp用于比较两个字符串的内容,根据字典顺序返回整数值:相等则为0,dest大于src时为正数,反之为负数。


2. 限定长度字符串操作函数自定义实现


(a) 自定义strncpy函数

void my_strncpy(char *dest, char* src, int count) {
    assert(*dest && *src);
    char* set = dest;
    while (count-- && (*dest++ = *src++))
        ;
    if (count >= 0) {
        *dest = '\0';
    }
    return dest;
}

my_strncpy函数仅复制源字符串src最多count个字符到目标字符串dest中,如果src的字符数量小于count,则剩余空间填充'\0'。


(b) 自定义strncat函数

void my_strncat(char* dest, char* src, int count) {
    assert(*dest && *src);
    char* set = dest;
    while (*dest != '\0') {
        dest++;
    }
    while (count-- && (*dest++ = *src++))
        ;
    if (count >= 0) {
        *dest = '\0';
    }
    return set;
}

my_strncat函数将源字符串src最多count个字符追加到目标字符串dest末尾,并确保结果字符串以'\0'结束。


(c) 自定义strncmp函数

int my_strncmp(const char* dest, const char* src, int count) {
    assert(dest && src);
    int i = 0;
    while (i < count && *dest == *src && *dest != '\0') {
        i++;
        dest++;
        src++;
    }

    if (i == count || *dest == '\0' || *src == '\0') {
        return 0;
    }
    else {
        return *dest - *src;
    }
}

my_strncmp函数比较两个字符串的前count个字符,当达到指定字符数或遇到任一字符串的结束符时停止比较,并返回相应的字符差值。

        在主函数(main)中,通过实际调用这些自定义函数并对比C标准库函数,我们可以验证它们的功能正确性,并进一步掌握字符串操作函数的底层逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/332481.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【.NET Core】 多线程之(Thread)详解

【.NET Core】 多线程之&#xff08;Thread&#xff09;详解 文章目录 【.NET Core】 多线程之&#xff08;Thread&#xff09;详解一、概述二、线程的创建和使用2.1 ThreadStart用于无返回值&#xff0c;无参数的方法2.2 ParameterizedThreadStart:用于带参数的方法 三、线程的…

REVIT二次开发生成三维轴网

步骤1 确定轴网 步骤2 生成3D轴网 using System; using System.Collections.Generic; using System.Linq; using System.Text;

C#winform上位机开发学习笔记2-串口助手的中文支持功能添加

分为两步&#xff1a; 1.串口接收支持中文显示 1.1.在软件初始化时写入此代码以支持汉字显示 //串口接收支持中文显示serialPort1.Encoding Encoding.GetEncoding("GB2312"); //串口1的解码支持GB2312汉字 2.串口发送支持中文输出 //支持中文输出Encoding Chine…

文心一言使用分享

ChatGPT 和文心一言哪个更好用&#xff1f; 一个直接可以用&#xff0c;一个还需要借助一些工具&#xff0c;还有可能账号会消失…… 没有可比性。 通用大模型用于特定功能的时候需要一些引导技巧。 import math import time def calculate_coordinate(c, d, e, f, g, h,…

【Origin绘图系列第3棒】箱型图:

Origin绘制箱型图 箱型图&#xff08;Boxplots&#xff09;案例1&#xff1a;基本绘制参考 箱型图&#xff08;Boxplots&#xff09; 案例1&#xff1a;基本绘制 选择箱型图后界面如下&#xff1a; 设置分组&#xff0c;如下设置&#xff0c; 图形如下所示&#xff1a; 根…

防火墙部署安全区域实验

目录 实验拓扑web登防火墙配置对象配置安全策略配置NAT配置安全策略测试抓包测试 实验拓扑 安全区域如下图&#xff1a; web登防火墙 按接口划分各区域&#xff0c;GE1/0/1为trust区域&#xff0c;内网是信任区域。 配置如下&#xff0c;可起别名方便操作&#xff0c;区域为t…

C++后端笔记

C后端笔记 资源整理一、高级语言程序设计1.1 进制1.2 程序结构基本知识1.3 数据类型ASCII码命名规则变量间的赋值浮点型变量的作用字符变量常变量 const运算符 二、高级语言程序设计&#xff08;荣&#xff09; 资源整理 C后端开发学习路线及推荐学习时间 C基础知识大全 C那…

ICCV2023 | PTUnifier+:通过Soft Prompts(软提示)统一医学视觉语言预训练

论文标题&#xff1a;Towards Unifying Medical Vision-and-Language Pre-training via Soft Prompts 代码&#xff1a;https://github.com/zhjohnchan/ptunifier Fusion-encoder type和Dual-encoder type。前者在多模态任务中具有优势&#xff0c;因为模态之间有充分的相互…

Docker部署Flask项目

Docker部署Flask项目 一、准备项目代码二、编写Dockerfile三、服务器部署 一、准备项目代码 这里写了一个简单的Flask的demo&#xff0c;源代码如下&#xff1a; from flask import Flaskapp Flask(__name__)app.route("/") def index():return "<h1 styl…

解决Windows下VSCode控制台乱码问题

我们在Windows使用VSCode编写C/C程序时&#xff0c;如果代码中的中文字符串使用的是UTF8编码&#xff0c;且代码内没有设置控制台的输出编码&#xff0c;或者编译时没有指定运行时编码&#xff08;GCC可以在编译时使用-fexec-charsetGBK来指定运行时的字符串编码&#xff1b;cl…

解决Uniapp插件市场试用原生插件项目 没有MD5签名安卓无法自定基座打包的情况

Uniapp插件市场中&#xff0c;有些插件是原生插件&#xff0c;必须使用自定义基座才能打包。但是传统keytool命令&#xff0c;已经无法看到安卓证书的MD5签名。现采用Android Studio查询signingReport的办法获取证书的MD5签名&#xff0c;并对插件的示例项目进行打包运行。一、…

c++基础3

一 、构造函数的初始化列表 可以指定成员对象的初始化方式 构造函数的初始化列表是在 C 中用于初始化成员变量的一种机制。它在构造函数的参数列表之后&#xff0c;构造函数的函数体之前使用&#xff0c;并使用冒号 : 分隔。初始化列表可以用于给成员变量赋初值&#xff0c;而不…

ycsb压测mongodb

下载解压 https://github.com/brianfrankcooper/YCSB/releases/download/0.17.0/ycsb-mongodb-binding-0.17.0.tar.gz tar -zxvf ycsb-mongodb-binding-0.17.0.tar.gzycsb提前已经在workload文件夹下准备好了几个压测场景分别对应workload[a:f] workloads/workloada 样例 …

Docker-harbor私有仓库部署与管理

目录 实验前准备部署Docker-compose服务部署Harbor服务修改配置文件创建项目 客户端测试修改客户端配置测试 维护管理Harbor创建项目创建用户查看日志修改Harbor.cfg配置文件补充 实验前准备 Harbor服务器&#xff1a;192.168.188.11 docker-ce、docker-compose、harbor-offli…

【计算机网络】OSI七层模型与TCP/IP四层模型的对应与各层介绍

1 OSI七层模型与TCP/IP四层模型对应 2 OSI七层模型介绍 OSI&#xff08;Open Systems Interconnection&#xff09;模型是一个由国际标准化组织&#xff08;ISO&#xff09;定义的七层网络体系结构&#xff0c;用于描述计算机网络中的通信协议。每一层都有特定的功能&#xff…

C#,入门教程(38)——大型工程软件中类(class)修饰词partial的使用方法

上一篇&#xff1a; C#&#xff0c;入门教程(37)——优秀程序员的修炼之道https://blog.csdn.net/beijinghorn/article/details/125011644 一、大型&#xff08;工程应用&#xff09;软件倚重 partial 先说说大型&#xff08;工程应用&#xff09;软件对源代码的文件及函数“…

2023 China DevOpsDays(DOD) DXCon 国际数字化转型与创新管理企业峰会:核心内容与学习收获(附大会核心PPT下载)

随着科技的飞速发展&#xff0c;数字化转型已成为企业持续发展的必经之路。2023年的China DevOpsDays & DXCon国际数字化转型与创新管理企业峰会&#xff0c;汇集了业界顶尖的专家、学者和企业领袖&#xff0c;共同探讨数字化转型的最新趋势和实践。本文将深入剖析大会的核…

多功能隐写融合

最近尝试了一个融合了多功能隐写的项目&#xff0c;参考了一些现有的资料和相关的开源库&#xff0c;并最终集成到了可视化UI当中。这篇文章讲述了实现的几项隐写技术的原理以及最终呈现的效果&#xff0c;后续会在“隐私保护”以及“ui”的专栏中继续更新详细的ui设计思路以及…

Asp .Net Core 系列:集成 Ocelot+Nacos+Swagger+Cors实现网关、服务注册、服务发现

文章目录 简介什么是 Ocelot ?什么是 Nacos ?什么是 Swagger ?什么是 Cors ? Asp .Net Core 集成 Ocelot网关集成 Nacos下游配置 Nacos配置跨域&#xff08;Cors&#xff09;网关和微服务中配置Swagger效果 简介 什么是 Ocelot ? Ocelot是一个开源的ASP.NET Core微服务网…

某C2鸡肋漏洞分析:你的CS安全吗?

CobaltStrike是一个知名的红队命令与控制框架&#xff0c;采用Beacon <-> TeamServer <-> Client架构。TeamServer存在受限路径穿越写文件与反序列化漏洞&#xff0c;可以被认证后客户端恶意利用。Client存在反序列化漏洞&#xff0c;可以被RogueCS攻击。 山寨威胁…