字符串函数

目录

一、求字符串长度

strlen

用法:

注意:

二、长度不受限制的字符串函数

strcpy

用法:

注意:

strcat

用法:

注意:

用例:

strcmp

用法:

三、长度受限制的字符串函数介绍

strncpy

用法:

注意:

用例:

strnact

用法:

用例:

strncmp

用法:

字符串查找

strstr

用法:

用例:

strtok

用法:

注意:

用例:


一、求字符串长度

strlen

用法:
 

strlen:返回 C 字符串 str 的长度。(与初始化的数组长度无关)

C字符串的长度由终止空字符确定:C 字符串的长度与字符串开头和终止空字符之间的字符数一样长(不包括终止空字符本身)。

注意:

1.字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包含 '\0' )。

2. 参数指向的字符串必须要以 '\0' 结束。
char str[] = { 'a','b','c' };//以大括号加单引号组成的字符串需要自己加'\0'
strlen(str);//str末尾没有\0,故strlen使用非法

3.函数返回值为 size_t ,是无符号的。

用例:

/* strlen example */
#include <stdio.h>
#include <string.h>int main ()
{char szInput[256];printf ("Enter a sentence: ");gets (szInput);printf ("The sentence entered is %u characters long.\n",(unsigned)strlen(szInput));return 0;
}

二、长度不受限制的字符串函数

strcpy

用法:

strcpy:复制字符串。

source 指向的 C 字符串复制到目标指向的数组中,包括终止的 '\0' 字符(并在该点停止)。

返回值:目标空间的起始地址。

注意:

1.源字符串必须以 '\0' 结束。
char arr1[5];
char arr2[] = { 'a','b','c' };strcpy(arr1, arr2);//arr2中不包含'\0',使用非法

2.会将源字符串中的 '\0' 拷贝到目标空间。

3.为避免溢出,目标指向的数组的大小应 足够长,以包含与源相同的 C 字符串(包括终止空字符),并且不应在内存中与源重叠。
4.目标空间必须可变。
char* str = "**********";//str为常量字符串,不可修改
char* p = "hello csdn";strcpy(str, p);//目标不可修改,故strcpy使用非法

用例:

/* strcpy example */
#include <stdio.h>
#include <string.h>int main ()
{char str1[]="Sample string";char str2[40];char str3[40];strcpy (str2,str1);strcpy (str3,"copy successful");printf ("str1: %s\nstr2: %s\nstr3: %s\n",str1,str2,str3);return 0;
}

strcat

用法:

strcat:将源字符串的副本追加到目标字符串。

目标中的终止空字符 '\0' 被源的第一个字符覆盖,并且在目标中由两者串联形成的新字符串的末尾包含一个空字符 ' \0' 。

返回值:目标空间的起始地址。

注意:

1.源字符串必须以 '\0' 结束。
2.目标空间必须有足够的大,能容纳下源字符串的内容。
3.目标空间必须可修改。
4.字符串无法自己给自己追加。

用例:

/* strcat example */
#include <stdio.h>
#include <string.h>int main ()
{char str[80];strcpy (str,"these ");strcat (str,"strings ");strcat (str,"are ");strcat (str,"concatenated.");puts (str);return 0;
}

strcmp

用法:

strcmp:将 C 字符串 str1 与 C 字符串 str2 进行比较。

此函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续以下对比,直到字符不同或达到终止空字符。

返回值:

三、长度受限制的字符串函数介绍

strncpy

用法:

strncpy:从字符串中复制字符。

source 的第一个字符数复制到 destination 。如果在复制 num 个字符之前找到源 C 字符串的末尾(由 null 字符表示),则目标将填充零,直到总共写入 num 个字符为止。

如果源长度超过 num,则不会在目标末尾隐式附加空字符。因此,在这种情况下,不应将目标视为以空结尾的 C 字符串(这样读取它会溢出)。

目的地和来源不得重叠。

返回值:目标空间的起始地址。

注意:

1.拷贝 num 个字符从源字符串到目标空间。
2.如果源字符串的长度小于 num ,则拷贝完源字符串之后,在目标的后边追加 0 ,直到 num 个。

用例:

/* strncpy example */
#include <stdio.h>
#include <string.h>int main ()
{char str1[]= "To be or not to be";char str2[40];char str3[40];/* 复制到大小缓冲区: */strncpy ( str2, str1, sizeof(str2) );/* 部分副本(仅五个字符): */strncpy ( str3, str2, 5 );str3[5] = '\0';   /* 手动添加空字符 */puts (str1);puts (str2);puts (str3);return 0;
}

strnact

用法:

strncat:从字符串追加字符。

将源的首 num 个字符追加到目标,外加一个终止空字符。

如果源中 C 字符串的长度小于 num,则仅复制终止空字符之前的内容。

返回值:目标空间的起始地址。

用例:

/* strncat example */
#include <stdio.h>
#include <string.h>int main ()
{char str1[20];char str2[20];strcpy (str1,"To be ");strcpy (str2,"or not to be");strncat (str1, str2, 6);puts (str1);return 0;
}

strncmp

用法:

strncmp:比较两个字符串的字符。

将 C 字符串 str1 的 num 个字符与 C 字符串 str2 的 num 个字符进行比较。
此函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续使用以下对,直到字符不同,直到达到终止的空字符,或者直到两个字符串中的 num 字符匹配,以先发生者为准。

返回值:

字符串查找

strstr

用法:

strstr:查找子字符串。

返回指向 str1 中第一次出现的 str2 的指针,如果 str2 不是 str1 的一部分,则返回一个空指针。

匹配过程不包括终止空字符,但它到此为止。

返回值:指向 str2 中指定的整个字符序列在 str1 中首次出现的指针,如果序列在 str1 中不存在,则为 null 指针。

用例:

#include<stdio.h>
#include<string.h>
int main()
{char str1[] = "Hello CSDN!";char str2[] = "He";char* tmp = strstr(str1, str2);if (tmp == NULL){printf("str2不是str1的一部分。");}else{printf("str2是str1的一部分。");}return 0;
}

strtok

用法:

strtok:将字符串拆分为 tokens

对此函数的一系列调用将 str 拆分为标记,这些标记是由分隔符中的任何字符分隔的连续字符序列。

在第一次调用时,该函数需要一个 C 字符串作为 str 的参数,其第一个字符用作扫描 token 的起始位置。在后续调用中,该函数需要一个空指针,并使用最后一个 token 末尾之后的位置作为扫描的新起始位置。

为了确定一个 token 的开头和结尾,该函数首先从起始位置扫描分隔符中未包含的第一个字符(该字符将成为 token 的开头)。然后从 token 的开头开始扫描分隔符中包含的第一个字符,该字符将成为令牌的末尾。如果找到终止空字符,扫描也会停止。

token 的此结尾将自动替换为空字符,并且 token 的开头由函数返回。

一旦在对 strtok 的调用中找到 str 的终止空字符,则对此函数的所有后续调用(以空指针作为第一个参数)都将返回空指针。

找到最后一个 token 的点由要在下一次调用中使用的函数在内部保留(不需要特定的库实现来避免数据争用)。

返回值:

如果找到 token ,则指向 token 开头的指针。                                                                                否则为 null 指针。
当在正在扫描的字符串中到达字符串的末尾(即空字符)时,始终返回空指针。

注意:

1. sep  参数是个字符串,定义了用作分隔符的字符集合。
2. 第一个参数指定一个字符串,它包含了 0 个或者多个由  sep  字符串中一个或者多个分隔符分割的标
记。
3. strtok 函数找到 str  中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。        (注: strtok函数会改变被操作的字符串,所以在使用 strtok 函数切分的字符串一般都是临时拷贝的内容并且可修改。)
4. strtok  函数的第一个参数不为 NULL ,函数将找到  str  中第一个标记, strtok  函数将保存它在字符串中的位置。
strtok  函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标
记。
5. 如果字符串中不存在更多的标记,则返回 NULL 指针。

用例:

int main()
{char str[] = "https://gitee.com/bright-and-sparkling-at-night"; //需要断开的语句char ret[50];//用来临时存放str的数组strcpy(ret, str);char* sep = ":/.";//分隔符集合char* tmp = NULL;for ( tmp = strtok(ret,sep); tmp != NULL; tmp = strtok(NULL, sep)){printf("%s\n", tmp);}return 0;
}

输出样例:

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

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

相关文章

QT实现钟表

1、 头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QPaintEvent> //绘制事件类 #include <QDebug> //信息调试类 #include <QPainter> //画家类 #include <QTimerEve…

使用Python构建强大的网络爬虫

介绍 网络爬虫是从网站收集数据的强大技术&#xff0c;而Python是这项任务中最流行的语言之一。然而&#xff0c;构建一个强大的网络爬虫不仅仅涉及到获取网页并解析其HTML。在本文中&#xff0c;我们将为您介绍创建一个网络爬虫的过程&#xff0c;这个爬虫不仅可以获取和保存网…

传统的经典问题 Java 的 Interface 是干什么的

传统的经典问题 Java 的 Interface 是干什么 解答 上面的这个问题应该还是比较好回答的吧。 只要你做过 Java &#xff0c;通常 Interface 的问题多多少少会遇到&#xff0c;而且可能会遇到一大堆。 在JAVA编程语言中是一个抽象类型&#xff08;Abstract Type&#xff09;&…

图解直接映射(Direct mapped)、全相联(Fully-associative)和组相联(Set-associative)cache缓存基本原理

图解直接映射&#xff08;Direct mapped&#xff09;、全相联&#xff08;Fully-associative&#xff09;和组相联&#xff08;Set-associative&#xff09;cache 一&#xff0c;直接映射缓存&#xff08;Direct mapped caches&#xff09;1.1 直接映射示例1.2 直接映射原理1.3…

flink集群与资源@k8s源码分析-总述

1 简介 集群和资源模块提供动态资源能力,是分布式系统关键基础设施,分布式datax,分布式索引,事件引擎都需要集群和资源的弹性资源能力,提高伸缩性和作业处理能力。本文分析flink的集群和资源的k8s模块,深入了解其设计原理,为开发自有的集群和资源组件做技术准备, 同时涉…

Canal实现Mysql数据同步至Redis、Elasticsearch

文章目录 1.Canal简介1.1 MySQL主备复制原理1.2 canal工作原理 2.开启MySQL Binlog3.安装Canal3.1 下载Canal3.2 修改配置文件3.3 启动和关闭 4.SpringCloud集成Canal4.1 Canal数据结构![在这里插入图片描述](https://img-blog.csdnimg.cn/c64b40c2231a4ea39a95aac81d771bd1.pn…

python装13的一些写法

一些当你离职后&#xff0c;让老板觉拍大腿的代码 1. any(** in ** for ** in **) 判断某个集合元素&#xff0c;是否包含某个/某些元素 代码&#xff1a; if __name__ __main__:# 判断 list1 中是否包含某个/某些元素list1 [1,2,3,4]a any(x in [5,4] for x in list1) 输…

【AI语言模型】阿里推出音视频转文字引擎

一、前言 阿里的音视频转文字引擎可以正式使用&#xff0c;用户可体验所有AI功能&#xff0c;含全文概要、章节速览、发言总结等高阶AI功能。通过阿里云主账号登录&#xff0c;可享受以下权益&#xff1a; 每日登录&#xff0c;自动获得2小时转写时长&#xff1b; 每邀请1名好…

python项目2to3方案预研

目录 官方工具2to3工具安装参数解释基本使用工具缺陷 future工具安装参数解释基本使用工具缺陷 python-modernize工具安装参数解释基本使用工具缺陷 pyupgrade工具安装参数解释基本使用工具缺陷 对比 官方工具2to3 2to3 是Python官方提供的用于将Python 2代码转换为Python 3代…

Jenkins学习笔记4

配置构建流程&#xff1a; Jenkins任务创建&#xff1a; 1&#xff09;创建新任务&#xff1a; 把这个Accept first connection改成 No Validation。问题得到解决。 构建触发器这块暂时没有需要配置的。 传输文件到nginx-server这个web服务器中。 将文件上传到/usr/share/n…

Django(18):中间件原理和使用

目录 概述Django自带中间件Django的中间件执行顺序自定义中间件函数使用类 其它中间件钩子函数process_viewprocess_exceptionprocess_template_response如何使用这3个钩子函数&#xff1f; 全局异常处理小结 概述 中间件(middleware)是一个镶嵌到Django的request(请求)/respo…

Learn Prompt-Prompt 高级技巧:Agents 组件详解

在以LLM驱动的Agent系统中&#xff0c;LLM扮演着Agent的大脑角色&#xff0c;并辅以几个关键组件&#xff1a; 规划&#xff1a;LLM能够进行全面的规划&#xff0c;不仅仅是简单的任务拆分。它可以评估不同的路径和策略&#xff0c;制定最佳的行动计划&#xff0c;以实现用户给…

MongoDB【部署 02】mongodb使用配置文件启动、添加为系统服务及自启动(一个报错:[13436][NotMasterOrSecondary])

MongoDB使用配置文件启动、添加为系统服务及设置自启动 1.是什么2.下载安装启动配置2.1 下载2.2 安装2.3 配置2.4 使用配置文件启动 3.设置系统服务及自启动3.1 设置为系统服务3.2 自启动 1.是什么 【以下内容来自ChatGPT3.5】 MongoDB是一个流行的开源文档型数据库管理系统&a…

41. Linux系统配置FTP服务器并在QT中使用QFtp实现文件上传

1. 说明 这篇博客主要记录一些在Linux系统中搭建FTP服务器时踩过的一些坑,以及在使用QFtp上传文件时需要注意的问题。 2. FTP环境搭建 在linux系统中,需要安装vsftpd,可以在终端中输入下面的命令进行安装: sudo apt-get install vsftpd使用上述命令安装后,系统中会有一…

ChunJun(OldNameIsFlinkX)

序言 ChunJun主要是基于Flink实时计算框架,封装了不同数据源之间的数据导入与导出功能.我们只需要按照ChunJun的要求提供原始与目标数据源的相关信息给Chunjun,然后它会帮我们生成能运行与Flink上的算子任务执行,这样就避免了我们自己去根据不同的数据源重新编辑读入与读出的方…

学习笔记|模数转换器|ADC原理|STC32G单片机视频开发教程(冲哥)|第十七集:ADC采集

文章目录 1.模数转换器&#xff08;ADC&#xff09;是什么&#xff1f;手册说明&#xff1a; 2.STC32G单片机ADC使用原理19.1.1 ADC控制寄存器&#xff08;ADC_CONTR)19.1.2 ADC配置寄存器&#xff08;ADCCFG)19.1.4ADC时序控制寄存器&#xff08;ADCTIM&#xff09;19.3 ADC相…

CSS盒子模型、列表样式

盒子模型 常用的html标签都可以看作一个盒子&#xff0c;称为盒子模型 盒子由四部分组成&#xff1a; content、padding、border、margin 边框 border:border-width&#xff08;粗细&#xff09; | border-style(样式) | border-color&#xff08;颜色&#xff09; #one{bor…

云原生的简单理解

一、何谓云原生&#xff1f; 一种构建和运行应用软件的方法 应用程序从设计之初即考虑到云的环境&#xff0c;原生为云而设计&#xff0c;在云上以最佳姿势运行&#xff0c;充分利用和发挥云平台的弹性分布式优势。 二、包括以下四个要素 采用容器化部署&#xff1a;实现云平…

蓝牙核心规范(V5.4)10.6-BLE 入门笔记之L2CAP

蓝牙篇之蓝牙核心规范(V5.4)深入详解汇总 1.概述 L2CAP负责协议复用、流量控制、服务数据单元(SDU)的分段和重组。它使用通道的概念来分隔在堆栈层之间传递的数据包序列。固定通道不需要设置,立即可用,并与特定的上层协议相关联。通道也可以通过指定的协议服务多路复用器…

湖南衡阳3D扫描在生物仿真研究的应用高精度三维扫描螃蟹-CASAIM中科广电

生物仿真研究与应用一直是科研及工艺品的热门方向&#xff0c;很多设计脱胎于生物本身&#xff0c;传统方式又大多只能以画师手绘为主&#xff0c;做到“纤毫毕现”极其困难&#xff0c;故而才有了“齐白石的虾”、“徐悲鸿的马”等出圈的艺术家的画作&#xff0c;对于某种生物…