C语言--12字符串处理函数

news2024/11/25 12:39:59

函数strstr

函数strchr与strrchr

  • 注意:
    1. 这两个函数的功能,都是在指定的字符串 s 中,试图找到字符 c。
    2. strchr() 从左往右找第一个,strrchr() 从左往右找最后一个。
    3. 字符串结束标记 ‘\0’ 被认为是字符串的一部分。

函数strlen

  • 示例:

char *s = "helloworld"; printf("helloworld的长度是:%d\n", strlen(s));

函数strcat与strncat

  • 注意:
    1. 这两个函数的功能,都是将 src 中的字符串,复制拼接到 dest 的末尾。
    2. strcat() 没有边界控制,因此可能会由于 src 的过长而导致内存溢出。
    3. strncat() 有边界控制,最多复制 n+1 个字符(其中最后一个是 ‘\0’ )到 dest 的末尾。

函数strtok

  • 注意:
    1. 该函数会将改变原始字符串 str,使其所包含的所有分隔符变成结束标记 ‘\0’ 。
    2. 由于该函数需要更改字符串 str,因此 str 指向的内存必须是可写的。
    3. 首次调用时 str 指向原始字符串,此后每次调用 str 用 NULL 代替。
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "apple,banana,orange,grape";
char *token = strtok(str, ",");
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, ","); // 继续分割
}
return 0;
}
/*
在上面的例子中,我们首先使用strtok函数将字符串str按照逗号分隔成多个子字符串,
然后使用while循环遍历每个子字符串,直到没有更多的子字符串为止。每次调用
strtok(NULL, ",")会继续从上一次分割的位置开始,直到分割完整个字符串。
*/

函数strcpy与strncpy

  • 注意:
    1. 这两个函数的功能,都是将 src 中的字符串,复制到 dest 中。
    2. strcpy() 没有边界控制,因此可能会由于 src 的过长而导致内存溢出。
    3. strncpy() 有边界控制,最多复制 n+1 个字符(其中最后一个是 ‘\0’ )到 dest 中。
    4. strcyp 函数的结束条件只有一个:遇到src中的结束符,因此有可能由于src过大导致异常退出
    5. strncpy 函数的结束条件有两个: 遇到src中的结束符 + 达到指定的大小N

函数strcmp与strncmp

  • 注意:
    • 比较字符串大小,实际上比较的是字符的 ASCII码值的大小。
    • 从左到右逐个比较两个字符串的每一个字符,当能“决出胜负”时立刻停止比较。
      • 返回值是第一个差异字符的差值
    • 结束条件:
      • strcmp 函数只有两个结束条件: 遇到结束符 + 遇到有差值
      • strncmp 函数只有三个结束条件: 遇到结束符 + 遇到有差值 + 达到n个字符

内存拷贝函数 memcpy

#include <string.h>

void *memcpy(void *dest, const void *src, size_t n);
    参数分析:
        dest --> 拷贝到的目标地址
        src --> 需要拷贝的原始数据
        n --> 期望拷贝的字节数
    返回值:
        返回目标地址 dest 

该函数的结束条件只有一个,就是拷贝的字节数达到了用于的期望值 N 。内存中尽管全部都是结束符也会把这些结束符一一拷贝。

示例:

char msg [128] = "Hello Even Jacy GZ2407";
msg [5] = 0 ;  // 手动在Hello 后面添加了 结束符 \0

char * map1 = calloc(1,128);
char * map2 = calloc(1,128);

strncpy(map1 , msg ,  128 ); // 当遇到Hello 后面的结束符会停止工作
memcpy (map2 , msg , 128 ); // 会一直拷贝直到拷贝了128字节为止

printf("map1:%s %s \n" , map1 , map1 +6 );
printf("map2:%s %s\n" , map2 , map2 +6);

free(map1);
free(map2);

内存数据比较 memcmp

#include <string.h>

int memcmp(const void *s1, const void *s2, size_t n);
    参数分析:
        s1 --> 需要比较的地址1   
        s2 --> 需要比较的地址2     
        n --> 期望比较的字节数
    返回值:
        返回两个内存间数据的差值(按字节比较)
        如果完全匹配则返回 差值0 
        如果不匹配则返回第一个差异点的差值 非零

该函数的结束条件只有一个,就是比较的字节数达到了用于的期望值 N 。内存中尽管全部都是结束符也会把这些结束符一一比较。它与strcmp的区别是strcmp 函数在遇到第一个结束符后会停止比较,后面的数据它无法比较。

总结:

所有的str开头的函数比如strstr \ strcpy \ strcmp.. 这些函数都会在遇到结束符时停止工作,因此在某些场合无法使用str进行某些操作,可以考虑mem开头的函数 比如 memcpy \ memcmp 。。。。

membarrier    memchr        memcpy        memfrob       memmove       memrchr       memusage
memalign      memccpy       memcmp        memfd_create  memmem        mempcpy       memset        
memusagestat

C库函数 - atoi()

 C 标准库 - 

描述

C 库函数 int atoi(const char *str) 把参数 str 所指向的字符串转换为一个整数(类型为int 型)。

声明

下面是 atoi()函数的声明。

int atoi(const char *str)

参数

  • str -- 要转换为整数的字符串。

返回值

该函数返回转换后的长整数,如果没有执行有效的转换,则返回零。

实例

下面的实例演示了 atoi()函数的用法。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    int val;
    char str[20];
    strcpy(str, "98993489");
    val = atoi(str);
    printf("字符串值= %s, 整型值 = %d\n", str, val);
    strcpy(str, "runoob.com");
    val = atoi(str);
    printf("字符串值= %s, 整型值 = %d\n", str, val);
    return (0);
}

让我们编译并运行上面的程序,这将产生以下结果:

字符串值 = 98993489, 整型值 = 98993489字符串值 = runoob.com, 整型值 = 0

结语:

        在本文中,我们深入探讨了C语言中的字符串处理函数及其重要性。从基本的字符串操作函数如 strlenstrcpystrcat 到更复杂的字符串搜索和比较函数,每个函数在处理字符数据时都扮演着不可或缺的角色。掌握这些函数不仅有助于我们提高编程的效率和可读性,还能让我们更好地理解内存管理和数据处理的底层机制。

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

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

相关文章

一款免费开源功能丰富的看图软件NeeView

NeeView 是一款功能丰富的图像查看软件&#xff0c;它以其独特的浏览体验和广泛的支持格式受到用户的欢迎。NeeView 不仅可以浏览普通的图像文件&#xff0c;还能够查看压缩包内的图片、预览PDF文档甚至播放视频文件。 NeeView 的主要特点&#xff1a; 多格式支持&#xff1a…

《人工智能安全治理框架》1.0版

人工智能是人类发展新领域&#xff0c;给世界带来巨大机遇&#xff0c;也带来各类风险挑战落实《全球人工智能治理倡议》&#xff0c;遵循“以人为本、智能向善”的发展方向&#xff0c;为推动政府、国际组织、企业、科研院所、民间机构和社会公众等各方&#xff0c;就人工智能…

无人机之穿越机的类型

穿越机&#xff0c;即FPV Drone或Racing Drone&#xff0c;是一种主要通过第一人称视角&#xff08;FPV&#xff09;进行操作的无人机。这种无人机通常配备有四个电机和相应的飞控系统&#xff0c;使其具有极高的飞行自由度和速度。穿越机的类型多样&#xff0c;可以从不同角度…

GD32E230程序烧录和开发环境使用介绍

GD32E230程序烧录和开发环境使用介绍 从GD32提供的资料来看&#xff0c;支持IAR、Keil、EmbeddedBuilder&#xff1b;目前该软件还是比较粗糙&#xff0c;个人上手体验不佳&#xff0c;面板菜单按键烧操作一下&#xff0c;动不动就卡死&#xff0c;仅支持gdlink调试器。 Embed…

第100+24步 ChatGPT学习:概率校准 Beta Calibration

基于Python 3.9版本演示 一、写在前面 最近看了一篇在Lancet子刊《eClinicalMedicine》上发表的机器学习分类的文章&#xff1a;《Development of a novel dementia risk prediction model in the general population: A large, longitudinal, population-based machine-learn…

元宇宙的崛起:重塑2024年游戏行业的新趋势

最早可以追溯到1994年&#xff0c;当时出现了世界上第一个轴测图界面的多人互动社交游戏《Web World》。‌这个游戏允许用户实时聊天、旅游、改造场景&#xff0c;开启了游戏中的UGC模式&#xff0c;可以视为元宇宙游戏的雏形。 2021年Roblox元宇宙的概念股上市&#xff0c;Fac…

学生护眼台灯哪个品牌比较好?分享五款效果好的学生护眼台灯

现在孩子的很多兴趣班和课后辅导班都是在线上举行&#xff0c;通常对着手机电脑长时间。电子产品有大量蓝光和辐射&#xff0c;会伤害到孩子的眼睛。但为了学习&#xff0c;也是没办法。护眼台灯的出现可以让孩子们的眼睛得到保护&#xff0c;防止蓝光对眼睛的伤害。学生护眼台…

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹&#xff0c;比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”&#xff0c;打开命令提示符&#xff0c;进入到发布代码目录 命令行启动.netcore项目的命令为: dotnet 项目启动文件.dll --urls"ht…

CSP-J基础之数学基础 计数原理与排列组合 一篇搞懂

文章目录 前言加法原理加法原理是什么使用场景 乘法原理举个例子总结 区别加法原理乘法原理总结 乘法原理的运用排列组合**排列****组合**总结 计算排列的可能种数举个例子数学定义数学公式应用公式例子应用 总结全排列举个例子数学定义数学公式作用 组合数学定义组合的公式举个…

系统安全设计规范(Word完整版)

1.1 总体设计 1.1.1 设计原则 1.2 物理层安全 1.2.1 机房建设安全 1.2.2 电气安全特性 1.2.3 设备安全 1.2.4 介质安全措施 1.3 网络层安全 1.3.1 网络结构安全 1.3.2 划分子网络 1.3.3 异常流量管理 1.3.4 网络安全审计 1.3.5 网络访问控制 1.3.6 完整性检查 1.…

天洑软件荣获国家级专精特新“小巨人”企业认定

近日&#xff0c;江苏省工业和信息化厅公布了第六批国家级专精特新"小巨人"企业名单&#xff0c;南京天洑软件有限公司&#xff08;以下简称“天洑软件”&#xff09;获得国家级专精特新“小巨人”企业认定。继2023年被评为江苏省“专精特新”中小企业后&#xff0c;…

【828华为云征文|华为云Flexus X实例:从选购到登录,一站式指南】

华为云Flexus X实例&#xff1a;从选购到登录&#xff0c;一站式指南 华为云Flexus X实例的优势大揭秘操作指南&#xff1a;一步步带你开通华为云Flexus X实例注册与登录华为云账号选择配置并购买选择Flexus X实例配置选择基础配置实例规格镜像存储网络弹性公网IP您可能需要&am…

佰朔资本:换手率是什么指标?换手率高股价为什么不涨呢?

换手率&#xff0c;也叫”周转率“&#xff0c;指的是在必定时间内商场中股票易手买卖的频率&#xff0c;是反映股票流通性强弱的指标之一。 换手率某段时期内成交量/发行总股数*100%。 通常而言&#xff0c;在股票商场上&#xff0c;换手次数多&#xff0c;筹码互动多&#…

Docker 部署 Kafka (图文并茂超详细)

部署 Kafka ( Docker ) Kafka对于zookeeper是强依赖&#xff0c;保存kafka相关的节点数据&#xff0c;所以安装Kafka之前必须先安装zookeeper [Step 1] : 部署 Zookeeper -> 拉取 Zookeeper 镜像 ➡️ 启动 Zookeeper 容器 docker pull zookeeper:3.4.14 docker run -d --…

Linux网络:网络协议栈协议

1.网络在体系结构的位置与网络协议栈的层状结构 2.协议栈各层的功能 协议栈分层设计达到了解耦目的&#xff0c;层与层之间只有接口之间的关系&#xff0c;提高了代码之间的可维护性与拓展性。同一层之间使用的协议相同&#xff0c;达到了跨设备的作用 3.协议 协议本质是一…

【详解】文件操作,Stream流

文件(File)操作——I/O流 Windows&#xff08;大多数&#xff09;进行文件操作的类File。 文件?文件夹?路径? 文件 能够使用工具打开操作的&#xff0c;文件是不能存储文件的。 一般文件具有后缀——.mp4 文件夹 存储文件的 路径问题——“/” 正右\ 反左/ ——统一朝左&am…

什么是点对点专线、SDH专线以及MSTP专线?

点对点专线&#xff08;Point-to-Point Circuit&#xff09;、SDH专线&#xff08;Synchronous Digital Hierarchy&#xff09;以及MSTP专线&#xff08;Multi-Service Transport Platform&#xff09;都是企业级通信服务中常见的网络连接类型&#xff0c;主要用于提供高带宽、…

SprinBoot+Vue停车场管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

《语文新读写》是知网收录吗?语文新读写编辑部查询

《语文新读写》是知网收录吗&#xff1f;语文新读写编辑部查询 《语文新读写》是知网收录。 一、期刊简介 《语文新读写》是经国家新闻出版总署正式批准&#xff0c;由上海世纪出版&#xff08;集团&#xff09;有限公司主管&#xff0c;上海少年儿童出版社有限公司主办的综合…

超宽带uwb芯片模块测距,扫地机器人轨迹跟随,自动导航定位、测距避障

智能家居产品正以未有的速度改变着我们的生活。从智能音箱到智能门锁&#xff0c;再到今天我们要深入探讨的主角——搭载了超宽带&#xff08;Ultra-Wideband, UWB&#xff09;芯片模块的扫地机器人&#xff0c;它们正悄然开启一场家庭清洁的创新。想象一下&#xff0c;一个不仅…