提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

好一段时间没发布文章了,今天为大家分享一些c语言字符串函数。包括strcpy,strcmp,strcat,strncpy,strncmp,strncat等,内容仅供参考要是有不足之处望指出。


目录

一、strcpy,strncpy

1.strcpy函数定义

2.strcpy原理

3.strncpy

4.strncpy函数声明

5.函数源码

二、strcat,strncat

1.strcat函数声明

2.原理&源码

三. strcmp,strncmp

1.strcmp函数声明

2.strcmp源码

3.strncmp函数


一、strcpy,strncpy

1.strcpy函数定义

这里参考的是msdn中strcpy的一些基本信息。

这里我们可以知道strcpy是字符拷贝函数,简介是拷贝字符串。函数接收的基本参数是char*strdestination这个是一个目的地字符指针,简单来说就是要把字符串拷贝到那个位置;const char*strsource是拷贝的初始位置。返回值是char*类型返回的内容就是目的地字符串的首地址

2.strcpy原理

先上代码(按照库函数实现)//参考vs2022

char* my_strcpy(char* arr, const char* arr1)//因为源字符串在此函数不能改变所以加上const
{char* ret = arr;//保存要返回的指针位置;assert(arr && arr1);//断言arr和arr1是否为空指针,若是空指针报错while (*arr++ = *arr1++)//将源头的字符串赋值到目的地,以'\0'结束;;return ret;
}
int main()
{char arr[10] = "abcde";char arr1[] = "bit";my_strcpy(arr, arr1);printf("%s", arr);return 0;
}

这是模拟库函数实现的strcpy函数,大家可以参考上边都有注释。运行结果为:未运行前

运行后:

这说明strcpy是从指针位置开始一直拷贝到'\0'(包括'\0')。这是无长度限制的结束只以'\0'结束,所以在使用时要考虑字符串是否存在'\0'不然数组可能越界操作。

3.strncpy

前面的strcpy是无限制长度的字符拷贝函数,因为在一些特殊条件下会出现错误,或想拷贝的字符串只有一部分那么c语言给出了strncpy这个函数用来拷贝固定个数字符,下面为大家简单的介绍一些strncpy函数。

4.strncpy函数声明

这个函数和strcpy很相似不同的有这个函数是拷贝固定个数的字符,他的函数参数里面最后多了一个size_t这个是无符号整型,因为拷贝个数一定是正的所以用的无符号整型,这个是在c语言中typedef了的大家可以搜一下看看,这里就不多介绍。

5.函数源码

这里也是模仿库中的代码,和strcpy大同小异大家参考:

char* my_strncpy(char* arr, const char* arr1,size_t n)
{char* ret = arr;//保存返回的指针。assert(arr && arr1);//断言两个指针不能为空。while (n && (*arr++ = *arr1++))//开始循环赋值n--;if (--n)//当遇到'\0'时n会少减一次,真实的n为n-1;while (n--)*arr++ = '\0';return ret;
}
int main()
{char arr[10] = "abcde";char arr1[] = "bit";my_strncpy(arr, arr1,4);printf("%s", arr);return 0;
}

运行结果:运行前内存布局

运行后:

这里特别说明如果拷贝的n比arr1整体内容大的话比如上边的代码是4为正常长度如果是6那么该如何拷贝呢-------这里c语言规定超出的部分一律补'\0'。参考下方运行结果。

结果为:

这就是关于字符串拷贝的一些知识,如有纰漏望指错,还有大家在使用时目的字符串的空间一定要留够哦。

二、strcat,strncat

1.strcat函数声明

如图,strcat的作用是追加一个字符串,返回类型是char*,第一个参数和第二个参数和上边的strcpy一样第一个是追加的目的地,第二个是追加的源头。下面为大家简单介绍一下这个函数的原理。注意strcat不能追加自己不能strcat(string1,string1);这样写是错误的!!!!!

2.原理&源码

先上代码


char * strcat(char * dest, const char * src)
{char *tmp = dest;//函数返回指针while (*dest)//循环查找目的地的'\0'dest++;while ((*dest++ = *src++) != '\0')//循环赋值;return tmp;}

如图,strcat与上面的strcpy很相似只不过strcat是从'\0'开始追加字符串。而strncat和strncpy也差不多这里不做过多介绍。

三. strcmp,strncmp

1.strcmp函数声明

下面为大家介绍一下字符串比较函数strcmp函数    c语言标准规定

第一个字符串大于第二个字符串,则返回大于0的数字 。第一个字符串等于第二个字符串,则返回0 。第一个字符串小于第二个字符串,则返回小于0的数字。

那么这就引出一个问题,字符串是怎么比较的,下面给大家举一个例子比如"abcde"和"atre",比较这两个字符串是这样比的就是一个字母一个字母的比,比较的是字母的ascall码表;比如首先字符a和a比较二者的ascall码值相等,然后比较第二个b和t比明显t的ascall值大于a的;所以第二个字符串大于第一个;这样的话我们就可以实现我们的代码了。

2.strcmp源码

此源码参照vs2022进行一些小的改动:

int my_strcmp(const char* p1, const char* p2)//进行比较不改变用count修饰
{assert(p1 && p2);//断言p1 p2不能是空指针while (*p1++ == *p2++)//循环判断每个字符;{if (*p1 == '\0'&&*p2=='\0')//如果二者相同到'\0'证明字符串相等return 0;}if (*p1 != *p2){return *--p1 - *--p2;}
}

这就是函数的原型供大家参考。

3.strncmp函数

这是strncmp的一些基本信息两个字符串一个无符号整型。比较方式和strcmp相同源码如下

int __cdecl strncmp (const char * first,const char * last, size_t count){if (!count)return(0);while (--count && *first && *first == *last){first++;last++;}return( *(unsignedchar *)first - *(unsignedchar *)last );
}

这就是本期整理的一些关于字符串操作函数的所有内容,觉得有用的朋友点个赞。

c语言字符操作函数汇总及模拟实现相关推荐

  1. C语言字符串操作函数汇总

    1. strcpy函数 语法:strcpy(str1,str2) 功能:将字符串str2复制到字符串str1中,并覆盖str1原始字符串,可以用来为字符串变量赋值. 返回:str1 注意: 1. 字符 ...

  2. c语言字符函数isalpha,总结C语言字符检测函数:isalnum、isalpha...

    前言:最近一直在刷leetcode的题,用到isalnum函数,用man手册查找了一下,总共有13个相关函数如下: #include int isalnum(int c); int isalpha(i ...

  3. C语言字符串库函数详解模拟实现(strlen、strcpy、strcat、strcmp)+字符操作函数+字符转换函数

    字符串库函数详解 一.无字符串长度限制的字符串函数 1. strlen 计算字符串长度函数 2. strcpy 字符串拷贝函数 3. strcat 字符串追加函数 4. strcmp 字符串比较函数 ...

  4. C语言文件操作函数大全(看到总结的真的很好,就转载贡献给大家了)

    C语言文件操作函数大全 clearerr(清除文件流的错误旗标) 相关函数 feof 表头文件 #include<stdio.h> 定义函数 void clearerr(FILE * st ...

  5. C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文

    C语言字符串操作函数 1. 字符串反转 - strRev 2. 字符串复制 - strcpy 3. 字符串转化为整数 - atoi 4. 字符串求长 - strlen 5. 字符串连接 - strca ...

  6. c语言全文件操作函数,C语言文件操作函数大全

    C语言 文件操作函数大全 C语言文件操作函数 2007-10-17 19:21 13.1C语言文件 1,两种文件存取方式(输入,输出方式) 顺序存取 直接存取 2,数据的两种存放形式 文本文件 二进制 ...

  7. [C语言]文件操作函数

    [C语言]文件操作函数 ​ 本文主要学习**fopen,fclose,fgetc,fgets,fputc,fputs,fwrite,fread,feof**这几个文件操作函数. ​ 以上函数,需要导入 ...

  8. C语言--内存操作函数memmove

    文章目录 一.C语言--内存操作函数memmove 1.1 memmove函数介绍 1.2 memmove使用示例 二.模拟实现memmove函数 一.C语言–内存操作函数memmove 1.1 me ...

  9. R语言常用sys函数汇总:sys.chmod、Sys.Date、Sys.time、Sys.getenv、Sys.getlocale、sys.getpid、sys.glob、sys.info等

    R语言常用sys函数汇总:sys.chmod.Sys.Date.Sys.time.Sys.getenv.Sys.getlocale.sys.getpid.sys.glob.sys.info等 目录

最新文章

  1. 苹果M1芯片升级果然很炸场:性能暴涨功耗速降!但最香新品竟是无降噪AirPods 3...
  2. 优秀的Java开发人员必备的6个技能
  3. vivo解bl锁_mi8 8SE 小米8解帐户锁 解ID锁 解激活锁
  4. Christopher G. Atkeson 简介
  5. MpAndroidChart源码修改之饼状图添加标志线
  6. 判断Windows服务是否启动
  7. caffe中 solver.prototxt文件
  8. 去除vss源代码管理
  9. Java从入门到精通(视频教程+源码)
  10. 软约束、硬约束、Minimum Snap的轨迹优化方法
  11. c语言面试题下载,C语言笔试题A.doc
  12. Windows BAT批处理脚本教程
  13. HTML5期末大作业:动漫网站设计——迪斯尼公主(6个页面) HTML+CSS+JavaScript 动漫网页HTML代码 学生网页课程设计期末作业下载 动漫大学生网页设计制作成
  14. 软件工程领域CCF B类会议:SANER介绍(以SANER 2019为例)
  15. Altera timing analyzer理解
  16. 智能开发血压计模块方案
  17. 内存控制器与SDRAM_内存接口概念
  18. Docker 学习实战路线
  19. 转载:IBM SNA:IBM 系统网络架构及其协议
  20. Oracle ORA-01033: ORACLE initialization or shutdown in progress 错误解决办法Windows版(手贱强制重启电脑的后果)

热门文章

  1. 房屋认购书签订应谨慎(转)
  2. php 生成bmp图片,[GD]生成bmp格式的图片(imagebmp)
  3. ONLYOFFICE如何制作完美的PPT
  4. Arrays.stream
  5. BZOJ 1128 [POI2008]Lam 高精度
  6. java8 lam表达式 BigDecimal 相加
  7. 数学 {邻域,区间,极值,最值,上界,有界,上确界,柯西序列,完备空间,单调有界定理,拓展实数集}
  8. 杯酒人生 —— 且将新酒试新茶
  9. BlinnPhone高光Shader解读
  10. 因质量控制导致回放录像过快的原因分析