C语言没有字符串类型.字符串通常放在常量字符串或字符数组中(字符串常量适用于不做修改的字符串函数。
结束标志为‘\0’

运行时一直到 '\0'时才结束,所以运行起来不是太安全

strlen

计算字符串长度
用例:

int main()
{   int len = strlen("KFCCrazyThursdayVme50");printf("%d\n", len);return 0;
}

原理:strlen获取字符串地址,从第一个字符开始向后找'\0',找不到计数器就加1,直到找到'\0'为止。上述输出为21。

错误用例:

int main()
{   char arr[] = { 'k','f','c','v','m','5','0' };int len = strlen(arr);printf("%d\n", len);return 0;
}

输出结果为74,这个结果实际为随机的一个值,

因为这样定义的arr里结尾没有 '\0'

strlen找不到就一直往后找,直到找到'\0'为止。

所以strlen计算的字符串一定要以'\0'结尾。

自己实现strlen函数

1.计数器方法

int my_strlen(const char* str)
{int a=0;//引入计数器while (*str)//str的值为0(\0)时自动结束{a++;str++;}return a;
}

2.递归法(不创建临时变量的方法)

int my_strlen(const char* str)
{if (*str != '\0')return 1 + my_strlen(++str);elsereturn 0;
}

注意:使用strlen函数时,若出现以下情况时

 if(strlen("abc")- strlen("abcde")<0)printf("aaaa");

输出不了结果

因为strlen返回值类型为无符号数

以下的函数:strcat,strcpy,strcmp是长度不受限制的字符串函数

strcpy

字符串拷贝

用例

int main()
{   char arr1[]="covermeaaaa";char arr2[]="coveryou";strcpy(arr1, arr2);printf("%s", arr1);return 0;
}

原理:取得两个字符串地址后从第一个字符开始拷贝,直到遇到'\0',

因此strcpy函数处理的复制源头的字符串也必须含有 '\0'

自己实现strcpy

char* my_strcpy(char* pre,const char* re)
{while (*pre++=*re++){};return pre;
}

(while(*pre++=*re++)中,同时进行了赋值,指针值增加,判断循环进行

使代码更简洁。

注意点:(假设函数为 strcpy (arr1,arr2)  )

1.arr2中必须包含'\0',不然会造成越界访问

2.arr1中空间必须比arr2大,否则空间不足

3.arr1不能为常量字符组,无法改变常量字符组的内容,函数无法运行

strcat

字符串追加

用例

int main()
{   char arr1[20]=" 哼哼";char arr2[]="啊啊啊啊啊";strcat(arr1, arr2);printf("%s", arr1);return 0;
}

原理

导入arr1指针后,指针向后移动到'\0'从\0开始进行与strcpy一样的操作

自己实现strcat

char* my_strcat(char* pre,const char* re)
{while (*pre!='\0'){pre++;}while (*pre++=*re++){};return pre;
}

注意(在strcat(arr1,arr2)中)

1.保证arr1空间足够

2.追加时arr2中的'\0'会一起加上去,且arr2中必须包含‘\0'

strcmp

字符串的比较

用例

int main()
{   char arr1[]="wwwwww";char arr2[]="QAQaaa";int a = strcmp(arr1, arr2);printf("%d", a);return 0;}

该函数是从两数组第一个字符开始,对比两字符的ASCII码值

从第一个开始,

若arr1>arr2的字符ASCII则返回一个正数

若arr1<arr2的字符ASCII则返回一个负数

若arr1=arr2的字符ASCII则跳至下一个字符

直到比较出大小

或者到两个字符都是'\0'时返回0

自己实现strcmp

int my_strcmp(const char* p1,const char* p2)
{while (p1==p2){if (p1 == '\0')//判断此时两字符串是否到最后一位都相等return 0;p1++;p2++;}if (*p1 > *p2)return 1;if (*p2 > *p1)return -1;
}

注意:

VS编译系统下返回的正数是1,负数是-1,不同编译系统不一样

在其他编译系统下若要返回随机正负值

可以如下设置

int my_strcmp(const char* p1,const char* p2)
{while (p1==p2){if (p1 == '\0')//判断此时两字符串是否到最后一位都相等return 0;p1++;p2++;}return (*p1-*p2);
}

自己学完网课后总结的可能不太完善 (′~`;)

字符串库函数(1)Strlen,strcpy,strcat,strcmp相关推荐

  1. 《C语言杂记》理解字符串处理函数 strlen() strcpy() strcat() strcmp()

    在linux C 编程中,我们经常遇到字符串的处理,最多的就是字符串的长度.拷贝字符串.比较字符串等:当然现在的C库中为我们提供了很多字符串处理函数.熟练的运用这些函数,可以减少编程工作量,这里介绍几 ...

  2. C语言之字符串探究(三):字符串库函数操作——strlen、strcat、strcpy、strcmp

    相关博文:C++之char和string字符串类探究 相关博文:C语言之数组探究(一):定义.大小.初始化.访问和三要素 相关博文:C语言之字符串探究(一):字符串与字符数组 相关博文:C语言之字符串 ...

  3. 缓存区的输入输出,字符串常用操作,实现strlen/strcpy/strcat/strcmp函数)

    输出缓冲区: 程序输入的数据并不能立即显示在屏幕上,而是先存储在输出缓冲区中,满足一些条件后才显示出来. 1.遇到\n后 2.遇到输入语句 3.当输出缓冲区满4K 4.当程序结束 5.手动刷新 ffl ...

  4. 字符串处理函数(strcpy strcat strcmp strlen)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.字符串复制函数 strcpy 二.字符串连接函数 strcat 三.字符串比较函数strcmp 四..求字符串长度 ...

  5. strlen,strcpy,strcat,strcmp函数

    1.strlen函数 strlen函数的作用是计算给定字符串的长度,从内存的某个位置开始,遇到第一个'\0'结束. 使用样例: int main() {const char *ar = "a ...

  6. c语言strcpy两字符串长度不同,(C语言)自己写字符串操作函数(一)——strlen/strcpy/strcat/strcmp/st...

    看到很多面试都会要求你写一些简单的字符串操作函数,这些函数看起来挺简单的,但是自己写的时候就会发现不少的问题.所以我自己把大部分的字符串操作函数都写了一遍,然后用了个测试程序来测试自己写的函数与库函数 ...

  7. C语言strlen,strcpy ,strcat, strcmp,strstr常用库函数的理解与模拟实现

    前言 本篇文章主要学习一下常见的库函数和模拟实现这些库函数,这篇文章可以加深我们对这些函数的理解. 一.strlen 这个函数是用来求字符串长度的,实现逻辑是: '\0' 作为字符串的结束标志,str ...

  8. 用子函数实现strlen.strcpy.strcat.strcmp(完整代码)

    strlen思路 循环遍历数组(字符串),直至第i位等于尾零'\0',循环结束:定义一个变量 在循环内自加 strcat思路 循环遍历第一个字符串,找到末尾,'\0'的位置,然后将第二个字符串,从头开 ...

  9. C语言之字符串探究(二):字符串原生操作——strlen、strcat、strcpy、strcmp自实现

    相关博文:C++之char和string字符串类探究 相关博文:C语言之数组探究(一):定义.大小.初始化.访问和三要素 相关博文:C语言之字符串探究(一):字符串与字符数组 相关博文:C语言之字符串 ...

  10. 自定义字符串函数:strlen,strcat,strcpy,strcmp

    版权声明:本文为博主原创文章,未经博主允许不得转载. 计算字符串长度函数strlen: int mystrlen(char *s) {int count = 0;char *p = s;if (!p) ...

最新文章

  1. CTE 中字符串拼接
  2. oracle 更改用户状态,密码
  3. 1.12 深层循环神经网络-深度学习第五课《序列模型》-Stanford吴恩达教授
  4. Python re 模块findall() 函数返回值展现方式详解
  5. because the principal dbo does not exist 问题解决方法
  6. 一种基于谷歌浏览器加载activex控件的解决方法与流程技术_Office控件使用总踩雷?畅写Office带你云端飞行...
  7. jquery教程_jQuery教程
  8. 【云周刊】第148期:“盲人摸象、感而不动、雾里看花”,阿里闵万里谈城市大脑三大挑战...
  9. HG255D刷机OPENWRT笔记
  10. 锐捷长ping_锐捷 ping 网关通 ping 机器不通
  11. 汉字编码计算机,计算机汉字编码,computerbased Chinese codings,音标,读音,翻译,英文例句,英语词典...
  12. html网页加线条,「网站特效」html5 canvas粒子线条特效制作方法
  13. 财富提升成都IT产业吸引力
  14. 2021年危险化学品经营单位主要负责人新版试题及危险化学品经营单位主要负责人考试试题
  15. 红帽子linux9百度云,红帽 Red Hat Linux相关产品iso镜像下载【百度云】
  16. 超级计算机排名太湖之光,发布超级计算机排名,中国“神威太湖之光”荣登榜首(印刷版)...
  17. iOS 直播流程概述
  18. 三个字的字,值得收藏
  19. 研究表明:手机移动数据可用于预测犯罪行为
  20. 中国大茴香行业利润及销量增长情况报告(新版)2021-2026年

热门文章

  1. Python | 图片转文字
  2. 怎么避免论文查重率过高的情况?
  3. Java程序员必备核心知识点整理,建议收藏!
  4. .NET USEING 原理
  5. Vue与Spring boot基于RSA非对称加密进行前后端交互
  6. python-qbittorrent库下载电影学习记录(含基本使用和常用函数)
  7. 【神经网络与深度学习】1.线性分类与感知机
  8. chrome 浏览手机网站
  9. 渗透测试工程师(NISP-PT)与网络安全运维工程师(NSP-SO)
  10. 【转】Mac 下钥匙串不能授权访问怎么解决--不错