[C][字符串][字符串常用函数介绍]详细讲解

目录

  • 0.前言
  • 1.gets
  • 2.strlen
  • 3.strcpy
  • 4.strncpy
  • 5.strcat - (效率低)
  • 6.strncat
  • 7.strcmp
  • 8.strncmp
  • 9.strstr
  • 10.strtok
  • 11.strerror
  • 12.perror(相对于strerror可能更好用)
  • 13.ctype.h
  • 14.memcpy
  • 15.memmove
  • 16.memcmp
  • 17.memset
  • 18.atoi


0.前言

  • 本篇主要介绍处理字符和字符串的库函数的使用及其注意事项
    • 求字符串长度
      • strlen
    • 长度不受限制的字符串函数
      • strcpy
      • strcat
      • strcmp
    • 长度受限制的字符串函数介绍
      • strncpy
      • strncat
      • strncmp
    • 字符串查找
      • strstr
      • strtok
    • 错误信息报告
      • strerror
    • 字符操作
    • 内存操作函数
      • memcpy
      • memmove
      • memset
      • memcmp
  • C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串中或者字符数组
    • 字符串常量适用于那些对它不做修改的字符串函数
  • 相邻字符串(“”)具有自动连接特性
  • 字符串在结尾的位置隐藏了一个\0的字符
  • \0是字符串的结束标志

1.gets

  • 函数原型char* gets(char* str)
  • 从标准输入stdin读取一行,并把它存储在str所指向的字符串中
    • 当读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定
  • 相较scanf的好处:遇到“ ”也可继续往后读写,直到遇到换行符

2.strlen

  • 函数原型size_t strlen(const char* str)
  • 字符串以'\0'作为结束标志,strlen()返回的是在字符串中'\0'前面出现的字符个数(不包含'\0')
  • 参数指向的字符串必须要以'\0'结束
  • 注意:函数的返回值类型为size_t,是无符号

3.strcpy

  • 函数原型char* strcpy(char* dest, const char* src)
  • 功能:将源字符指向的C字符串复制到目标指向的数组中,会将源字符串中的'\0'拷贝到目标空间
  • 源字符串必须以'\0'结束
  • 目标空间必须足够大,以确保能存放源字符串
  • 目标空间必须可变

4.strncpy

  • 函数原型char* strncpy(char* dest, const char* src, size_t num)
  • 功能:将源字符串的前num个字符从源字符串到目标空间
    • 如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num

5.strcat - (效率低)

  • 函数原型char* strcat(char* dest, const char* src
  • 功能:把src所指向的字符串追加dest所指向的字符串的结尾
  • 源字符串必须以 '\0’结束
  • 目标空间必须有足够的大,能容纳下源字符串的内容
  • 目标空间必须可修改

6.strncat

  • 函数原型:`char* strncat(char* dest, const char* src, size_t num)
  • 功能:把src所指向的字符串追加到dest所指向的字符串的结尾,直到num字符长度为止
    • 如果源字符串的长度小于num,则仅复制终止字符'\0'之前的内容
  • 返回值:该函数返回一个指向最终的目标字符串dest的指针

7.strcmp

  • 函数原型int strcmp(const char* str1, const char* str2)
  • 功能:比较两个字符串,strcmp()开始比较每个字符串的第一个字符,如果它们彼此相等,则继续执行向后对比,直到字符不同或达到终止字符'\0'
  • 返回值
    • < 0 -> str1 < str2
    • 0 -> str1 == str2
    • > 0 -> str1 > str2

8.strncmp

  • 函数原型int strncmp(const char* str1, const char* str2, size_t num)
  • 功能:类似strcmp(),比较到出现第一个字符不一样或者一个字符串结束或者num个字符全部比较完

9.strstr

  • 函数原型char* strstr(const char* str1, const char* str2)
  • 功能:在字符串 str1 中查找第一次出现字符串str2的位置,不包含终止符'\0'
  • 返回值:返回在str1中第一次出现str2字符串的位置,如果未找到则返回NULL

10.strtok

  • 函数原型char* strtok(char* str, const char* sep)
  • 参数
    • sep包含分隔符的C字符串,可以是一个分隔符集合
      • 例如" ,.-"
    • str要被分解成一组小字符串的字符串
  • 功能strtok()找到str中的下一个子串,并将其用'\0'结尾,返回一个指向这个子串的指针
    • strtok()的第一个参数不为NULL,函数将找到str中第一个子串,strtok()将它保存常量字符串区(静态区)
    • strtok()的第一个参数为NULL,函数将在同一个字符串中被保存的位置开始,查找下一个子串
      • strtok()维护的缓冲区有"记忆功能",倘若连续分割同一个字符串,则除了第一次调用外,后续调用第一个参数传NULL即可
    • 如果字符串中不存在更多的子串,则返回NULL
  • 注意strtok()会改变被操作的字符串,所以在使用strtok()切分的字符串一般都是临时拷贝的内容并且可修改

11.strerror

  • 函数原型char* strerror(int errnum)
  • 功能:返回错误码,所对应的错误信息
    • 使用库函数的时候,调用库函数失败的时候,都会设置错误码(全局的错误码)
  • 头文件errno.h

12.perror(相对于strerror可能更好用)

  • 函数原型:`void perror(const char* str)
  • 功能:把一个描述性错误消息输出到标准错误stderr
    • 首先输出字符串str,后跟一个冒号,然后是一个空格
  • perror()相对于strerror()可能更好用

13.ctype.h

  • 该头文件下的接口用于测试和映射字符
  • 如果参数c满足描述的条件,则这些函数返回非零(true),如果参数c不满足描述的条件,则这些函数返回零(false)
函数如果它的参数符合下列条件就返回真
iscntrl任何控制字符
isspace空白字符:空格' ',换页'f',换行\n,回车\r,制表符\t或者垂直制表符\v
isdigit十进制数字(0~9)
isxdigit十六进制数字,包括所有十进制数字(0~9),字母(a~f A~F)
islower小写字母a~z
isupper大写字母A~Z
isalpha字母(a~z A~Z)
isalnum字母(a~z A~Z) 或者 数字(0~9)
ispunct标点符号,任何不属于数组或者字母的圆形字符(可打印)
isgraph任何图形字符
isprint任何可打印字符,包括图形字符和空白字符
tolower把大写字母转换为小写字母
toupper把小写字母转化为大写字母

14.memcpy

  • 函数原型void* memcpy(void* dest, const void* src, size_t num)
  • 功能memcpy()src的位置开始向后复制num个字节的数据到dest的内存位置
    • memcpy()在遇到'\0'的时候并不会停下来
    • 毕竟是内存操作函数,不是字符串操作函数
  • 注意:如果srcdest有任何的重叠,复制的结果都是未定义的
  • 返回值:返回一个指向目标存储区dest的指针

15.memmove

  • 函数原型void* memmove(void* dest, const void* src, size_t num)
  • 功能:类似memcpy(),和memcpy()差别memmove()处理的源内存块和目标内存块是可以重叠的
  • 如果源空间和目标空间出现重叠,就得使用memmove函数处理

16.memcmp

  • 函数原型int memcmp(const void* ptr1, const void* ptr2, size_t num)
  • 功能:和strcmp()类似,但是是以字节为单位进行比较

17.memset

函数原型void* memset(void* str, int c, size_t n)
功能:以字节为单位设置内存


18.atoi

  • 函数原型int atoi(const char* str)
  • 功能:把参数str所指向的字符串转换为一个整数(类型为int)
  • 参数str – 要转换为整数的字符串
  • 返回值:返回转换后的整数,如果没有执行有效的转换,则返回零
  • 依赖库<stdlib.h>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】文件的编译链接和预处理

文件的编译链接和预处理 程序的翻译环境和执行环境翻译环境预处理&#xff08;预编译&#xff09;过程编译过程汇编过程链接过程 运行环境 预处理详解预处理符号预处理指令#define#define定义标识符#define定义宏#define替换规则 #与###的使用##的使用 带有副作用的宏参数宏与函…

软考之信息系统管理知识点(1)

信息系统管理知识点 计算机中的CPU主要由运算单元、控制单元、寄存器组和时序电路等组成&#xff1b; 运算单元是对数据进行加工的部件&#xff0c;主要完成算术运算和逻辑运算。控制单元主要是从主存取出指令进行分析&#xff0c;控制其他部件完成指令的功能。寄存器组既可以用…

超详细的前后端实战项目(Spring系列加上vue3)前端篇(二)(一步步实现+源码)

好了&#xff0c;兄弟们&#xff0c;继昨天的项目之后&#xff0c;开始继续敲前端代码&#xff0c;完成前端部分 昨天完成了全局页面的代码&#xff0c;和登录页面的代码&#xff0c;不过昨天的代码还有一些需要补充的&#xff0c;这里添加一下 内容补充&#xff1a;在调用登…

Spring (16)Spring Boot Starter是什么

Spring Boot Starter是Spring Boot的一个核心特性&#xff0c;它提供了一种快速、简便的方式来引入和管理项目依赖。通过Starters&#xff0c;开发者可以轻松地将必要的依赖集成到项目中&#xff0c;无需手动指定每个库的版本。Starters包含了一组自动配置的模板&#xff0c;这…

代码随想录算法训练营第36期DAY38

DAY38 435无重叠区间 昨晚很快就想出来了&#xff0c;今天相当于二刷。 class Solution {public: static bool mycmp(vector<int>&a,vector<int>&b){ return a[1]<b[1]; } int eraseOverlapIntervals(vector<vector<int>&g…

sql查询,直接返回json数组格式

文章目录 数据库查询&#xff0c;并且sql直接返回json格式 数据库查询&#xff0c;并且sql直接返回json格式 SELECTJSON_ARRAYAGG(JSON_OBJECT(groupId, g.id,groupName, g.NAME,groupColor, g.group_color,num, COALESCE(c.num, 0),type, g.type)) AS result FROMxbd_group g…

如何部署一个基本符合ERC20的智能合约

运行genache-cli 运行以下命令genache-cli下载MetaMask浏览器拓展钱包 添加账户 导入账户 输入genache-cli生成其中的密钥 选择【显示测试网络】点击【添加网络】 添加自己本地的网络 选择该测试网络&#xff0c;账号里就会有100RETH 在remix里接通这个测试帐号 …

10.2.k8s的附加组件-Metrics-server组件与hpa资源pod水平伸缩

目录 一、概述 二、安装部署Metrics-Server组件 1.下载Metrics-Server资源清单 2.编辑Metrics-Server的资源清单 3.验证Metrics-Server是否成功安装 4.使用top命令测试是否管用 三、hpa资源实现pod水平伸缩&#xff08;自动扩缩容&#xff09; 1.编写deploy资源清单 2.…

Sap Hana 数据迁移同步优化(二)

简述 CloudCanal 近期对 Hana 源端链路做了新一轮优化&#xff0c;这篇文章简要做下分享。 本轮优化主要包含: 表级别 CDC 表表级别任务位点表级别触发器 单 CDC 表的问题 CloudCanal 在实现 Hana 源端增量同步时&#xff0c;最初采用的是单 CDC 表的模式。 即所有订阅表…

【C语言】深入理解指针(一)(上)

本篇文章将讲解&#xff1a; &#xff08;1&#xff09;内存和地址 &#xff08;2&#xff09;指针变量和细致 &#xff08;3&#xff09;指针变量类型的意义 一&#xff1a;内存和地址 &#xff08;1&#xff09;内存 在讲内存和地址之前&#xff0c;我们讲一个生活中的…

Three.js 研究:1、如何让物体动起来

1、制作模型动画 2、模型动画在代码中的调用 使用这个例子进行修改&#xff0c;使他能动作webgl_animation_skinning_morph.html 制作好的模型放到如下路径 /three.js-master/examples/models/gltf/无标题.gltf修改加载模型文件的地址 修改动画名称 运行 点击动画后&…

彩虹聚合二级域名DNS管理系统源码v1.3

聚合DNS管理系统可以实现在一个网站内管理多个平台的域名解析&#xff0c; 目前已支持的域名平台有&#xff1a;阿里云、腾讯云、华为云、西部数码、CloudFlare。 本系统支持多用户&#xff0c;每个用户可分配不同的域名解析权限&#xff1b;支持API接口&#xff0c; 支持获…

Oracle 证书的重要性

随着信息技术的飞速发展&#xff0c;数据库管理已成为企业运营中不可或缺的一部分。Oracle作为全球领先的数据库管理系统提供商&#xff0c;其Oracle Certified Professional&#xff08;OCP&#xff09;认证已成为数据库管理员和开发人员追求的专业认证之一。本文将深入探讨Or…

标准化软件实施方案(直接套用即可)

软件实施方案 二、 项目介绍 三、 项目实施 四、 项目实施计划 五、 人员培训 六、 项目验收 七、 售后服务 八、 项目保障措施 软件开发全套资料获取&#xff1a;&#xff08;本文末个人名片也可直接获取&#xff09;软件开发全套资料_数字中台建设指南-CSDN博客 软件产品&am…

接口响应断言

目录 接口断言介绍接口断言方式介绍响应状态码断言 课程目标 掌握什么是接口断言。了解接口断言的多种方式。掌握如何对响应状态码完成断言。 思考 这两段代码是完整的接口自动化测试代码吗&#xff1f; …省略… when().get(“https://httpbin.ceshiren.com/get?namead&…

【LeetCode算法】第58题:最后一个单词的长度

目录 一、题目描述 二、初次解答 三、官方解法 四、总结 一、题目描述 二、初次解答 1. 思路&#xff1a;双指针法。low指向单词头&#xff0c;high指向单词后的空格&#xff0c;则high-low就是每个单词的长度。算法步骤&#xff1a;①low从头往后查找第一个非空格的字符&…

Python 将文件夹中的图片信息导入到 Excel 的表格

引言 在数据处理和管理的日常任务中&#xff0c;经常需要将文件夹中的图片文件信息&#xff08;如文件名、路径、创建日期、大小、分辨率等&#xff09;整理成一个 Excel 表格。这篇博客将介绍如何使用 Python 中的 wxPython 模块创建一个 GUI 应用&#xff0c;用户可以通过这…

display(a,b)什么意思

在Python中&#xff0c;如果你看到display(a,b)这样的代码&#xff0c;它通常意味着有人正在使用IPython.display模块中的display函数来同时显示两个对象。 IPython.display是Jupyter Notebook和JupyterLab等交互式计算环境的一部分&#xff0c;它提供了一种在笔记本中显示各种…

【Linux】用户级缓冲区

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

微服务项目收获和总结---第4天(文章审核和保存)

文章审核以及APP端保存文章 业务流程&#xff1a; App端保存接口&#xff1a; 数据库表详情 文章的基本信息表&#xff1a;id&#xff0c;标题&#xff0c;作者id&#xff0c;频道id...... 文章的权限/配置表&#xff1a;存储文章是否可以评论&#xff0c;是否上架&#xff…