常见的字符串处理函数strstr,strlen,strtok

2023-05-16

字符串处理

    • strstr
    • strlen
    • strtok
    • strchr
    • strcpy
    • strcmp
    • strcat
    • sprintf
    • bzero
    • memset
    • memcpy
    • memcmp
    • errno

strstr

strstr ( 在一字符串中查找指定的字符串 )
    头文件:
        #include <string.h>
    定义函数:
        char *strstr(const char *haystack, const char * needle);
    参数分析:
        haystack  -->  需要查找的源字符串 ( "Hello Myoung" ) 
        needle --> 需要查找的字符串 ("Myoung") 查找到的内容
    返回值:
        成功 返回第一次出现的地址
        失败  返回0 NULL 

strlen

strlen ( 返回字符串长度 )
    头文件:
        #include <string.h>
    定义函数:
        size_t strlen (const char *s);
    参数分析:
        s --> 需要计算长度的字符串
    返回值:
        成功 返回字符串的字符数, 不包括结束字符"\0"

strtok

strtok ( 分割字符串 )
    头文件:
        #include <string.h>
    定义函数:
        char * strtok(char *s, const char *delim);
    参数分析:
        s -->  需要分割的字符串 (需要可读写的内存地址)
        delim -->  分隔符(可以有多个分隔符)
    返回值:
        返回下一个分割后的字符串指针, 
        如果已无从分割则返回 NULL.

注意:

strtok 第一次使用需要传递指针p, 如果想要从当前位置继续进行分割则指针p 必须写NULL

strchr

strchr ( 查找字符串中第一个出现的指定字符 )
strrchr   // R
    头文件:
        #include <string.h>
    定义函数:
        char * strchr (const char *s, int c);  // 从左往右找
        char * strrchr(const char *s, int c); // 从右往左找
    参数分析:
        s --> 需要遍历寻找的字符串 (只读地址即可)
        c --> 需要查找的字符 (虽然是个整型,但是实质是是一个无符号的字符类型)
    返回值:
        指定的字符则返回该字符所在地址, 
        否则返回 0.

strcpy

strcpy ( 拷贝字符串)
strncpy  【 推荐使用 】
 
    头文件:
        #include <string.h>
    定义函数:
        char *strcpy(char *dest, const char *src);   // 没有控制拷贝长度,有可能会溢出
        char * strncpy(char *dest, const char *src, size_t n); // 需要填写拷贝长度, 可以减少溢出
    参数分析:
        dest --> 拷贝字符串的目标地址 (可读写的内存)
        src --> 需要拷贝的字符串 (只读即可)
        n   -->  控制需要拷贝的长度
    返回值:
        成功 参数 dest 的字符串起始地址

strcmp

strcmp ( 比较字符串 )
    头文件:
        #include <string.h>
    定义函数:
        int strcmp(const char *s1, const char *s2);
        int strncmp(const char *s1, const char *s2, size_t n);
    参数分析:
        s1  --> 需要比较的字符串1  
        s2  --> 需要比较的字符串2
        n  --> 需要比较的前 N 个字符
    返回值:
        成功 则返回0 表示两个字符串完全相同
        失败 则返回 第一给不同字符的差值

strcat

strcat ( 连接两字符串)
    头文件:
        #include <string.h>
    定义函数:
        char *strcat(char *dest, const char *src);
        char * strncat(char *dest, const char *src, size_t n);
    参数分析:
        dest --> 目标地址, 拷贝到该字符串后面
        src  --> 源地址, 需要拷贝的内容
        n   --> 需要拷贝的字符数
    返回值:
        返回参数 dest 的字符串起始地址

sprintf

sprintf ( 格式化字符串复制 )
    头文件:
        #include <stdio.h>
    定义函数:
        int sprintf(char *str, const char * format, ...);
    参数分析:
        str --> 复制后的字符串(目标地址, 必须可读写)
        format --> 格式化控制参数(参考打印函数)
        ...  --> 可变参数
    返回值:
        成功则返回参数 str 字符串长度, 
        失败则返回-1, 错误原因存于 errno 中.

bzero

bzero ( 将一段内存内容全清为零 )
    头文件:
        #include <string.h>
    定义函数:
        void bzero(void *s, int n);
    参数分析:
        s --> 需要清空的内存的入口地址
        n --> 需要清空的字节数
    返回值:
        无

memset

memset ( 将一段内存空间填入某值 )
    头文件:
        #include <string.h>
    定义函数:
        void * memset(void *s, int c, size_t n);
    参数分析:
        s --> 需要设置的内存的入口地址 (可读写)
        c --> 需要填入的字符的ASCII值
        n --> 需要填入的字节数
    返回值:
        返回指向 s 的指针. 

注意:

该函数是按字节进行写入指定值, 因此注意应该按字节来访问。

这个函数不是很适合用来清空内存, 推荐使用bzero

memcpy

memcpy ( 拷贝内存内容)
    头文件:
        #include <string.h>
    定义函数:
        void * memcpy (void * dest, const void *src, size_t n);
        void *memccpy(void *dest, const void *src, int c, size_t n);
    参数分析:
        dest --> 目标地址 (可读写的内存地址)
        src --> 源数据地址
        c --> 
        n --> 需要拷贝的字节数
    返回值:
        返回指向 dest 的指针

示例:

    char * s1 = "Hello world" ;
    char * s2 = calloc(128 , 1 ) ; 
    memset(s2 , 'A', 128 );


    // strlen 计算的长度并不包括结束符, 因此应该+1让函数把结束符一起拷贝     
    memcpy(s2 , s1 , strlen(s1)+1);

    printf("%s\n" , s2) ;

注意:

与strcpy 不同的地方在于,strcpy在遇到结束符时停止拷贝, 而memcpy 则是会完整拷贝内存中的前N字节,不会因为遇到结束符而停止

memccpy 在复制的过程中会顺便检查是否出现了 =字符 c , 如果出现, 则停止拷贝(拷贝C之后),后面的内容就没有继续拷贝。

《拷贝到字符C为止, 最多拷贝n个字节》

memcmp

memcmp ( 比较内存内容 )
    头文件:
        #include <string.h>
    定义函数:
        int memcmp (const void *s1, const void *s2, size_t n);
    参数分析:
        s1 --> 字符串1 
        s2 --> 字符串2
        n -->  需要比较的前N字节
    返回值:
        成功 返回0 表示两个内容一致
        失败 返回之间的差值

errno

概念: 属于一个全局变量 ,不需要我们自己定义。但是需要包含一个头文件 #include <errno.h>

strerror ( 返回错误原因的描述字符串)
    头文件:
        #include <string.h>
    定义函数:
        char * strerror(int errnum);
    参数分析:
        errnum --> 错误号码
    返回值:
        返回描述错误原因的字符串指针
perror ( 打印出错误原因信息字符串 )
    头文件:
        #include <stdio.h>
    定义函数:
        void perror(const char *s);
    参数:
        s --> 用户自定义的错误提示
    返回值:
        无
for (size_t i = 0; i < 134; i++)
{
    printf("errno:%d:msg:%s\n" , i , strerror(i));  // 遍历输出所有的错误号码对应的信息
}
    
errno = 3 ; // 手动修改错误号码的值
perror("左勾拳失败"); // 根据错误号码之直接输出信息

输出结果:
errno:0:msg:Success
errno:1:msg:Operation not permitted  
errno:2:msg:No such file or directory
errno:3:msg:No such process
errno:4:msg:Interrupted system call  
errno:5:msg:Input/output error       
errno:6:msg:No such device or address
errno:7:msg:Argument list too long   
errno:8:msg:Exec format error        
errno:9:msg:Bad file descriptor
errno:10:msg:No child processes
errno:11:msg:Resource temporarily unavailable
errno:12:msg:Cannot allocate memory
errno:13:msg:Permission denied
errno:14:msg:Bad address
errno:15:msg:Block device required
errno:16:msg:Device or resource busy
errno:17:msg:File exists
errno:18:msg:Invalid cross-device link
errno:19:msg:No such device
errno:20:msg:Not a directory
errno:21:msg:Is a directory
errno:22:msg:Invalid argument
errno:23:msg:Too many open files in system
errno:24:msg:Too many open files
errno:25:msg:Inappropriate ioctl for device
errno:26:msg:Text file busy
errno:27:msg:File too large
errno:28:msg:No space left on device
errno:29:msg:Illegal seek
errno:30:msg:Read-only file system
errno:31:msg:Too many links
errno:32:msg:Broken pipe
errno:33:msg:Numerical argument out of domain
errno:34:msg:Numerical result out of range
errno:35:msg:Resource deadlock avoided
errno:36:msg:File name too long
errno:37:msg:No locks available
errno:38:msg:Function not implemented
errno:39:msg:Directory not empty
errno:40:msg:Too many levels of symbolic links
errno:41:msg:Unknown error 41
errno:42:msg:No message of desired type
errno:43:msg:Identifier removed
errno:44:msg:Channel number out of range
errno:45:msg:Level 2 not synchronized
errno:46:msg:Level 3 halted
errno:47:msg:Level 3 reset
errno:48:msg:Link number out of range
errno:49:msg:Protocol driver not attached
errno:50:msg:No CSI structure available
errno:51:msg:Level 2 halted
errno:52:msg:Invalid exchange
errno:53:msg:Invalid request descriptor
errno:54:msg:Exchange full
errno:55:msg:No anode
errno:56:msg:Invalid request code
errno:57:msg:Invalid slot
errno:58:msg:Unknown error 58
errno:59:msg:Bad font file format
errno:60:msg:Device not a stream
errno:61:msg:No data available
errno:62:msg:Timer expired
errno:63:msg:Out of streams resources
errno:64:msg:Machine is not on the network
errno:65:msg:Package not installed
errno:66:msg:Object is remote
errno:67:msg:Link has been severed
errno:68:msg:Advertise error
errno:69:msg:Srmount error
errno:70:msg:Communication error on send
errno:71:msg:Protocol error
errno:72:msg:Multihop attempted
errno:73:msg:RFS specific error
errno:74:msg:Bad message
errno:75:msg:Value too large for defined data type
errno:76:msg:Name not unique on network
errno:77:msg:File descriptor in bad state
errno:78:msg:Remote address changed
errno:79:msg:Can not access a needed shared library
errno:80:msg:Accessing a corrupted shared library
errno:81:msg:.lib section in a.out corrupted
errno:82:msg:Attempting to link in too many shared libraries
errno:83:msg:Cannot exec a shared library directly
errno:84:msg:Invalid or incomplete multibyte or wide character
errno:85:msg:Interrupted system call should be restarted
errno:86:msg:Streams pipe error
errno:87:msg:Too many users
errno:88:msg:Socket operation on non-socket
errno:89:msg:Destination address required
errno:90:msg:Message too long
errno:91:msg:Protocol wrong type for socket
errno:92:msg:Protocol not available
errno:93:msg:Protocol not supported
errno:94:msg:Socket type not supported
errno:95:msg:Operation not supported
errno:96:msg:Protocol family not supported
errno:97:msg:Address family not supported by protocol
errno:98:msg:Address already in use
errno:99:msg:Cannot assign requested address
errno:100:msg:Network is down
errno:101:msg:Network is unreachable
errno:102:msg:Network dropped connection on reset
errno:103:msg:Software caused connection abort
errno:104:msg:Connection reset by peer
errno:105:msg:No buffer space available
errno:106:msg:Transport endpoint is already connected
errno:107:msg:Transport endpoint is not connected
errno:108:msg:Cannot send after transport endpoint shutdown
errno:109:msg:Too many references: cannot splice
errno:110:msg:Connection timed out
errno:111:msg:Connection refused
errno:112:msg:Host is down
errno:113:msg:No route to host
errno:114:msg:Operation already in progress
errno:115:msg:Operation now in progress
errno:116:msg:Stale file handle
errno:117:msg:Structure needs cleaning
errno:118:msg:Not a XENIX named type file
errno:119:msg:No XENIX semaphores available
errno:120:msg:Is a named type file
errno:121:msg:Remote I/O error
errno:122:msg:Disk quota exceeded
errno:123:msg:No medium found
errno:124:msg:Wrong medium type
errno:125:msg:Operation canceled
errno:126:msg:Required key not available
errno:127:msg:Key has expired
errno:128:msg:Key has been revoked
errno:129:msg:Key was rejected by service
errno:130:msg:Owner died
errno:131:msg:State not recoverable
errno:132:msg:Operation not possible due to RF-kill
errno:133:msg:Memory page has hardware error
errno:134:msg:Unknown error 134
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

常见的字符串处理函数strstr,strlen,strtok 的相关文章

  • PX4的控制与输出

    文章目录 前言控制器部分输出部分控制组混控器混控器的启动信号输出 前言 这篇记录一下自己分析PX4从位置控制 gt 速度控制 gt 姿态控制 gt 角速度控制 gt 电机输出的源码框架的阅读与理解 xff0c 便于之后自己修改控制器 在这个
  • 悬停油门的参数估计方法

    悬停油门的参数估计方法 估计悬停油门 xff0c 实际上就是完成油门值与飞机加速度之间的映射关系 xff0c 准确的估计值可以让飞行控制更为准确 在PX4中 xff0c 对悬停油门的估计方法采用的是扩展卡尔曼滤波 xff0c Fast dr
  • D435/D435i使用技巧

    D435 D435i使用技巧 D435 D435i是目前市场上使用最为方便的双目深度相机 虽然淘宝上其价格有些让人望而却步 xff0c 但是咸鱼上成色不错的D435 D435i 价格就在1000左右 xff0c 依旧是自主无人机视觉定位和感
  • PX4 imu传感器配置

    PX4 传感器配置 坐标系定义 旋转变化 reference 在机器人中各个坐标系之间的变换是非常常见的 xff0c 而在ROS tf 工具中 xff0c 以及Eigen 中 我们常常会见到RPY的旋转表示和四元数的旋转表示 当然学航空出生
  • PX4常用sh命令

    PX4常用sh命令 基于NUTTXnsehll的设计 xff0c PX4还自定义了一些sh命令 xff0c 可以在调试飞控时起到重要作用 这些命令在PX4开发者手册中 xff0c 都有提到 但是为了方便后期使用 xff0c 这里再单独做一下
  • 强化学习介绍(RL)

    一 简介 机器学习有三大分支 xff0c 监督学习 无监督学习和强化学习 xff0c 强化学习是系统从环境学习以使得奖励最大的机器学习 人工智能中称之为强化学习 xff0c 在控制论中被称之为动态规划 xff0c 两者在概念上是等价的 也被
  • 深度学习中高斯噪声:为什么以及如何使用

    来源 xff1a DeepHub IMBA 本文约1800字 xff0c 建议阅读8分钟 高斯噪声是深度学习中用于为输入数据或权重添加随机性的一种技术 在数学上 xff0c 高斯噪声是一种通过向输入数据添加均值为零和标准差 的正态分布随机值
  • 面向算法选择的元学习研究综述

    来源 xff1a 专知 本文为综述介绍 xff0c 建议阅读5分钟本文对基于元学习的算法选择进行综述总结 xff0c 为研究人员了解相关领域的发展现状提供参考 摘要 xff1a 随着人工智能的快速发展 xff0c 从可行的算法中选择满足应用
  • tortoise git 冲突解决

    1 背景 使用tortoise git 解决conflict 2 解释 Git进行同步的时候 xff0c 经常会出现冲突 xff0c 有时候冲突的选项会有三种选项 xff1a 1 Resolved xff1a 直接把文件标识为冲突已经解决
  • win11旗舰版安装WSL子系统和环境-7搭建图形化界面和Docker容器

    搭建图形化界面和Docker容器 Win10Linux子系统 xff08 WSL xff09 图形界面的安装 https blog csdn net NovaSliver article details 83190269 utm mediu
  • 推荐几款Nodejs实现的web框架

    本文首发于个人博客 胖蔡叨叨叨 xff0c 点击可查看原文 Nodejs在近些年可以说是发展异常的迅猛 xff0c 由于同样使用的js原因 xff0c 对于前端开发人员可以说是非常的友善了 xff0c Github上有关nodejs的贡献也
  • chatgpt_academic学术优化(配置使用教学-保姆级)

    一 Anaconda 下载及安装 1 官网下载链接 xff1a www anaconda com 2 安装 xff08 1 xff09 下载完成后 xff0c 双击exe进行安装 xff08 2 xff09 安装完成后 xff0c 点击An
  • C++正则表达式regex_match,regex_search和regex_replace简单使用

    C 43 43 正则表达式 零 前言一 说明二 测试代码三 运行结果 零 前言 正则表达式是非常强大的文本处理和字符串处理工具 xff0c C 43 43 11之前一直没有引入正则表达式 xff0c 只能使用boost库中的 xff0c C
  • debian桌面启动不了的问题

    怎么发生的 xff1f 昨天安装了一堆的软件后 xff0c 发现桌面没法在桌面进行应用程序切换 xff0c 然后就重启了一下系统 xff0c 想恢复 xff0c 结果 xff0c 重启后 xff0c 开机就直接进shell了 分析 做了一些
  • Byobu 命令行终端的强大利器

    My heart is in the work xff01 工作以来接触到Linux系统的地方挺多 xff0c Android的源码下载 xff0c 服务器的连接等等 xff0c 用的越多越发现Linux的强大与方便 一次偶然间 xff0c
  • .NET下基于API封装的DirectUIHWND窗体访问

    直接切入正题 1 添加引用 项目 gt 添加引用 gt C Progmme 1 MSN Messenger msnmsgr exe 2 using MessengerAPI 声明 private MessengerAPI Messenger
  • 漫话Kubernetes的网络架构,该用NodePort还是Ingress还是load balancer?

    目录 一 基本概念 1 Kubernetes pod 2 Kubernetes service 3 Kubernetes NodePort 4 Kubernets Ingress 5 Kubernetes loadbalancer 二 从实
  • 彻底理解git 本地分支与远程分支,以及git pull与git fetch的区别, 以及git status输出的“Your branch is behind xxx”

    git 本地分支 xff1a 当clone一个远程repo之后 xff0c 默认会新建一个master或main的本地分支 比如 xff1a git branch a main remotes origin HEAD gt origin m
  • 深入分析OpenFlow协议

    文章目录 OpenFlow是什么 xff1f xff1f xff1f OpenFlow的起源与发展OpenFlow工作原理OpenFlow组件OpenFlow控制器1 NOX POX2 ONOS3 OpenDaylight OpenFlow
  • ubuntu登录输入用户名密码之后重新跳回登录界面

    Ubuntu 14 04 今天学习鸟哥的私房菜使用了命令startx xff0c 通过注销重新登录 xff0c 就发生了如题的情况 在登录界面输入正确的用户名密码 xff0c 显示器黑屏一段时间 xff0c 然后重新跳转回登录界面 重启无效

随机推荐

  • npm install 报错:verbose stack Error: unable to resolve dependency tree

    环境 npm 64 7 24 1 node 64 v12 16 2 一 分析原因 xff1a 经排查 xff0c 1 发现有组件package json中有peer dependency xff0c 指明了angular 7 x 的版本 x
  • Python实现单链表

    单向链表也叫单链表 是链表中最简单的一种形式 它的每个节点包含两个域 一个信息域 元素域 和一个链接域 这个链接指向链表中的下一个节点 而最后一个节点的链接域则指向一个空值 nbsp 表元素域elem用来存放具体的数据 链接域next用来存
  • SpringBoot+JavaMailSender发送邮件

    SpringBoot 43 JavaMailSender发送邮件 概述 spring提供了发送邮件的接口JavaMailSender xff0c 通过JavaMailSender可以实现后端发送邮件 xff0c 并且可以根据不同业务需求 x
  • SpringBoot启动时:Process finished with exit code 0解决办法

    记录一次项目启动的报错 spring boot 启动项目 xff0c 无异常信息报错 xff0c 但是项目启动不起来 xff0c 提示 xff1a Process finished with exit code 0 这个提示并不是报错了 x
  • java8 List对象去重(按照对象属相去重)

    方式一 xff1a 去重后对象在集合的顺序变化 List对象去重 xff0c 按照对象的某个字段去重 xff0c 返回去重后新的对象集合 public static void main String args List lt Student
  • MAC安装maven步骤

    1 从maven官网下载 xff1a http maven apache org download cgi 2 解压 xff08 Mac xff09 zip包解压 unzip apache maven 3 8 6 src zip tar包解
  • 阿里云ECS服务器配置外部端口和内部容器端口的映射

    前言 阿里云ECS服务器默认是入网所有端口关闭 xff0c 出网所有端口打开 我们在服务器上启动一个应用程序 xff0c 默认是无法通过http 公网ip port 的方式访问的 如果想要访问成功 xff0c 阿里云ECS的网络端口进行两部
  • Linux查看所有对外开放的端口

    Linux查看所有对外开放的端口 Centos 8查看所有对外开放的端口 查看防火墙对对应的端口是否已开启 firewall cmd list all 方式1 已知服务使用的端口 xff0c 查看服务是否在监听 netstat anlp g
  • Doccker部署若依前后端分离版本

    docker部署若依前后端分离版本 部署步骤请上gitee拉取 xff1a 码云 docker部署遇到的问题总结 docker compose up 启动msql时 xff0c 并没有执行初始化脚本 xff0c 原因是mysql的docke
  • springboot多模块启动,在yml配置了启动端口但启动还是8080

    springboot多模块项目 xff0c 每个模块单独配置了启动端口 xff0c 但是启动时 xff0c 都以8080端口启动 xff0c 配置如下 项目结构 xff1a provider模块的application yml配置 cons
  • 线程池几种状态转换

    线程池几种状态转换 xff1a
  • OpenStack与SDN控制器的集成

    OpenStack与SDN控制器的集成 蒋暕青 1 OpenStack Neutron简介 Neutron添加了一层虚拟的网络服务让租户 用户 构建自己的虚拟网络 Neutron是对网络的虚拟化 xff0c 该网络可以从一个地方移动到另一个
  • INSTALL_FAILED_TEST_ONLY

    查看博客 http www enjoytoday cn posts 159 Android studio安装apk无法安装 xff0c 报错误 xff0c 网上搜索可以看到都说是 调用者不被允许测试的测试程序 xff0c 但具体这句话具体是
  • 好看的网站

    1 红色主题网站 雕塑类 http www ibaolan com 2 40个布局排版好看的网页设计作品 https www shejidaren com 40 creative web design layout html 3 做了那么久
  • Part 2:Cocos2d-x开发基础-Cocos简介与环境搭建-关东升-专题视频课程

    立即学习 https edu csdn net course play 6735 133126 是独立按键还是矩阵按键
  • 51单片机 串口12864显示驱动

    include lt reg52 h gt define uchar unsigned char define uint unsigned int sbit CS 61 P2 5 片选信号 xff08 RS xff09 sbit SID 6
  • Nginx https 配置步骤,免费证书申请

    第一步 xff1a http aq chinaz com SSL 需要先注册登录站长工具 第二步 xff1a 填写域名信息 xff0c xff08 设置的密钥密码要记住 xff0c 在第五步时需要用到 xff09 第三步 xff1a 选择手
  • C/C++分割字符串: strtok函数

    C语言如何实现将字符串ABCD efgh i1234 David Julie Susan中 和 分隔开的几个字串ABCD efgh i1234 David Julie Susan取出来 xff1f 有个函数叫 strtok span cla
  • 浅谈用Google Scholar查找并获取外文文献的技巧和方法

    一 Google Scholar是什么 Google Scholar是Google于2004年底推出的专门面向学术资源的免费搜索工具 xff0c 能够帮助用户查找包括期刊论文 学位论文 书籍 预印本 文摘和技术报告在内的学术文献 xff0c
  • 常见的字符串处理函数strstr,strlen,strtok

    字符串处理 strstrstrlenstrtokstrchrstrcpystrcmpstrcatsprintfbzeromemsetmemcpymemcmperrno strstr span class token function str