当前位置: 首页 > news >正文

超详细讲解长度受限制的字符串函数(保姆级教程!!!)

超详细讲解长度受限制的字符串函数(保姆级教程!!!)

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

长度受限制的字符串函数

strncpy函数

在这里插入图片描述
strncpy函数是把 src 所指向的字符串复制到 dest,最多复制 num 个字符。当 src 的长度小于 num 时,dest 的剩余部分将用空字节(\0)填充。
dest – 指向用于存储复制内容的目标数组。
src – 要复制的字符串。
num – 要从源中复制的字符数。

strncpy函数的使用

下面展示strncpy函数的使用:

#include <stdio.h>
#include <string.h>int main()
{char src[40];char dest[12];memset(dest, '\0', sizeof(dest));strcpy(src, "This is runoob.com");strncpy(dest, src, 10);printf("最终的目标字符串: %s\n", dest);return(0);
}

编译并运行上面的程序将产生以下结果:
最终的目标字符串: This is ru
strncpy函数具有以下的特点:

1、拷贝num个字符从源字符串到目标空间。
2、如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。

strncpy函数的模拟实现

char* my_strncpy(char* dest, const char* src, int num)
{char* tmp = dest;while (num && (*dest++ = *src++)){num--;}if (num){while (num--){*dest++ = '\0';}}return tmp;
}

strncat函数

在这里插入图片描述
strncat函数把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 num 字符长度为止。
dest – 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串,包括额外的空字符。
src – 要追加的字符串。
num – 要追加的最大字符数

strncat函数的使用

下面的实例演示了 strncat函数的用法:

#include <stdio.h>
#include <string.h>int main ()
{char src[50], dest[50];strcpy(src,  "This is source");strcpy(dest, "This is destination");strncat(dest, src, 15);printf("最终的目标字符串: |%s|", dest)return(0);
}

让我们运行上面的程序将产生以下结果:
最终的目标字符串: |This is destinationThis is source|
strncat函数具有以下的特点:

1、dest要有足够的空间。
2、strncat会将dest字符串最后的’\0’覆盖掉,字符追加完成后,再追加’\0’。
3、如果num大于字符串src的长度,那么仅将src全部追加到dest的尾部;如果num小于字符串src的长度,该字符会将src的所有字符附加在dest末尾。无论哪种情况,都会在新字符串的末尾添加空字符。

strncat函数的模拟实现

void my_strncat(char* dest, const char* src, int num)
{char* tmp = dest;char* tmq = (char*)src;assert(dest);assert(src);while (*tmp){tmp++;}while (num--){*tmp = *tmq;tmp++;tmq++;}*tmp = '\0';printf("%s", dest);printf("\n");
}

strncmp函数

在这里插入图片描述
strncmp函数把 str1 和 str2 进行比较,最多比较前 num 个字节。
str1 – 要进行比较的第一个字符串。
str2 – 要进行比较的第二个字符串。
num – 要比较的最大字符数。
strncmp函数的返回值如下图所示:
在这里插入图片描述
即该函数返回值如下:

如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str1 大于 str2。
如果返回值 = 0,则表示 str1 等于 str2。

strncmp函数的使用

下面是此函数的strncmp函数的使用例子:

#include <stdio.h>
#include <string.h>int main ()
{char str1[15];char str2[15];int ret;strcpy(str1, "abcdef");strcpy(str2, "ABCDEF");ret = strncmp(str1, str2, 4);if(ret < 0){printf("str1 小于 str2");}else if(ret > 0){printf("str2 小于 str1");}else{printf("str1 等于 str2");}return(0);
}

让我们编译并运行上面的程序,这将产生以下结果:
str2 小于 str1
需要注意的是,字符串大小的比较本质上是根据每个字符的Asall表值大小进行比较得到的,从字符串的第一个字母进行比较,如果相等就依次往后继续比较,直至比较出结果或者遇到\0为止,当然,strncmp函数还有一个限制的要求是比较num个字节,当比较的字节数减为0时也会停止。

strncmp函数的模拟实现

int my_strncmp(const char* str1, const char* str2, int maxlen)
{assert(str1 != NULL);assert(str2 != NULL);int ret = 0;while (!(ret = (*str1 - *str2)) && *str1 && (maxlen--)){str1++;str2++;}if (ret < 0)ret = -1;else if (ret > 0)ret = 1;return ret;
}

那么,今天的长度受限制的字符串函数的相关内容我就讲述完啦,因为个人能力有限,文章难免会出现纰漏,届时有错误可以私信发给我以及时更正,谢谢大家!
请添加图片描述

http://www.lryc.cn/news/3366.html

相关文章:

  • 【c#】c#常用小技巧方法整理(4)——cmd命令提示符,c#调用cmd
  • 在项目中遇到的关于form表单的问题
  • 德国奔驰、博世和保时捷的员工年薪有多少?
  • Mybatis与微服务注册
  • JAVA练习47-合并两个有序数组
  • 右键菜单管理 - Win系统
  • 背包问题求方案数、具体方案
  • 电商导购CPS,淘宝联盟如何跟单实现用户和订单绑定
  • 【Shell1】shell语法,ssh/build/scp/upgrade,环境变量,自动升级bmc,bmc_wtd,
  • 刷题记录:牛客NC208250牛牛的最美味和最不美味的零食
  • 微搭低代码从入门到精通08-轮播容器
  • 分类预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多特征分类预测
  • 华为10年经验测试工程师,整理出来的python自动化测试实战
  • OpenCV杂谈 - 如何导出图像到内存中其他结构
  • Session与Cookie的区别(四)
  • Linux 文件锁 - fcntl
  • CellularAutomata元胞向量机-2-初等元胞自动机MATLAB代码分享
  • OpenStack云平台搭建(6) | 部署Neutron
  • Lesson 05.Configuring the Oracle Network Environment
  • 理论五:接口vs抽象类的区别,如何用普通的类模拟抽象类和接口
  • 【Hello Linux】 Linux的权限以及Shell原理
  • 【STM32】【HAL库】遥控关灯2 分机
  • 代码随想录算法训练营第27天|● 93.复原IP地址 ● 78.子集 ● 90.子集II
  • Unity UI合批的问题
  • MWORKS--系统建模与仿真
  • PC端开发GUI
  • 解读手机拍照的各个参数(拍照时,上面会有6个符号)
  • 数字钥匙最新进展文章
  • 如何在VMware虚拟机上安装运行Mac OS系统(详细图文教程)
  • C++中的强制类型转换