2024.3.9-408学习笔记-C-字符函数和字符串函数

1、strlen函数

用于计算字符串长度(除了末尾的'\0')。

函数格式:size_t strlen ( const char * str )

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

注意:
1、参数指向的字符串必须要以'\0'结束。

2、注意函数的返回值为sizt_t,是无符号整型。

3、strlen的使用需要包含头文件<String.h>


2、strcpy函数

用于字符串拷贝。

函数格式:char* strcpy(char * destination,const char * source )

source是源字符串的首字符地址,destination是目标空间的首地址,返回值是返回的destination,也就是目标空间的首地址。

实际意义是:获得一份从source这个地址开始的字符串拷贝(也就是说在拷贝完遇到的第一个'\0',也就是源字符串末尾的终止字符'\0'后就会停止),并将这份拷贝从destination这个地址开始往后覆盖,整个过程不会改变源字符串。

注意:
1、源字符串必须以'\0'结束。

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

3、目标空间必须足够大,以确保能存放源字符串。

4、目标空间必须可修改,所以说作为参数destination的只能是字符数组,以及指向栈区的字符指针,而不能是指向字符串字面量的字符指针,这种指针指向的是静态区,静态区里的数据不可修改。

#include <stdio.h>
#include <string.h>int main()
{char a[] = "hello";char b[20] = {0};char* pb = b;strcpy(pb,a);printf("%s\n",b);\\正常打印return 0;
}

3、strcat函数

用于连接两个字符串。

函数格式:char *strcat(char *destination,const char*source)

destination是指向目标字符串首字符的指针,source是指向源字符串首字符的指针,返回值返回的是destination

实际意义就是:获得一份从source这个地址开始的字符串拷贝(也就是说在拷贝完遇到的第一个'\0',也就是源字符串末尾的终止字符'\0'后就会停止),并将这份拷贝从以destination为首地址的字符串的首个终止字符'\0'的位置开始往后覆盖,也就是说会用源字符串拷贝的首字符覆盖掉目标字符串末尾的'\0'

注意:
1、源字符串必须以'\0'结束。

2、目标字符串中必须有'\0',否则没办法知道追加从哪里开始。

3、目标空间必须有足够的大,能容纳下源字符串的内容。

4、目标空间必须可修改。

5、切忌一种情况,就是字符数组拿自己给自己追加,这种操作的最终结果是一直追加下去,没有尽头,即程序进入死循环;原因就是自己的原件的终止字符'\0’已经被覆盖,函数找不到结尾条件,就会永远运行下去。


3、strcmp函数

字符串比较函数。

函数格式:int strcmp (const char * str1, const char * str2)

str1和str2是相互比较的字符串首地址。返回值是整型,两个若str1大于str2,则返回正整数;若str1小于str2,则返回负整数;若str1等于str2,则返回0。

实际意义:从字符串的首地址开始,逐个比较单个字符ASCII码值,直到对应位置上出现相异的字符为止,哪个字符串的对应位置上率先出现ASCII码值更大的字符,则对应的字符串更大。

注意:
1、两个字符串是无法直接比较大小的,因为直接比较的话比较的是首字符的地址大小,如果要比较字符串的内容,则必须使用strcmp函数。

2、字符串末尾的终止字符'\0'的ASCII码值为0。


4、strcpy、strcat、strcmp与strncpy、strncat、strncmp

strcpy、strcat、strcmp这三个函数都是长度不受限制的字符串函数,也就是被这三个函数操作的字符串的字符个数都是不受限制的。

strncpy、strncat、strncmp这三个函数都是长度受限制的字符串函数,也就是被这三个函数操作的字符串的字符个数是受限制的。


5、strncpy

限定字符个数的字符串拷贝函数。

函数格式:char * strncpy ( char * destination, const char * source, size_t num )

source是源字符串的首字符地址,destination是目标空间的首地址,num是需要从源字符串中拷贝的字符个数,返回值是返回的destination,也就是目标空间的首地址。

实际意义是:获得一份从source这个地址开始的字符串前n个字符的字符流拷贝(包括终止字符'\0'),并将这份拷贝从destination这个地址开始往后覆盖,整个过程不会改变源字符串。

注意:
在strcpy的注意事项上追加:

1、如若需要拷贝的限制数量n小于源字符串的总字符个数,那么在拷贝完最后一个字符后,并不会在这个字符流末尾补'\0',而是直接使用已拷贝的字符流。

2、如若需要拷贝的限制数量n大于源字符串的总字符个数,那么在拷贝完遇到的第一个'\0'(也就是源字符串末尾的终止字符'\0')后会自动往字符流末尾持续补'\0',直到符合数量n。

3、如若需要拷贝的限制数量n等于源字符串的总字符个数,则函数等同于strcpy函数。


6、strncat

限定字符个数的字符串追加函数

函数格式:char * strncat ( char * destination, const char * source, size_t num )

destination是指向目标字符串首字符的指针,source是指向源字符串首字符的指针,num是指从源字符串拷贝过来用于追加的字符个数,返回值返回的是destination

实际意义就是:获得一份从source这个地址开始的字符串前n个字符的字符流拷贝(包括终止字符'\0'),并将这份拷贝从以destination为首地址的字符串的首个终止字符'\0'的位置开始往后覆盖,也就是说会用源字符串拷贝的首字符覆盖掉目标字符串末尾的'\0'

注意:
在strcat的注意事项上追加:

1、如若需要拷贝的限制数量n小于源字符串的总字符个数,则在拷贝完成后自动往字符流末尾补上一个终止字符'\0',使其成为一个字符串后再使用。(并不会像strncpy函数那样不补'\0'

2、如若需要拷贝的限制数量n大于源字符串的总字符个数,那么在拷贝完遇到的第一个'\0'(也就是源字符串末尾的终止字符'\0')后拷贝就直接结束了。(并不会像strncpy函数那样持续在末尾补'\0'直到满足n)

3、如若需要拷贝的限制数量n等于源字符串的总字符个数,则函数等同于strcat函数。


7、strncmp

限定字符个数的字符串比较函数。

函数格式:int strncmp ( const char * str1, const char * str2, size_t num )

str1和str2是相互比较的字符串首地址,num是比较的字符个数。返回值是整型,两个若str1大于str2,则返回正整数;若str1小于str2,则返回负整数;若str1等于str2,则返回0。

实际意义:从字符串的首地址开始,逐个比较前num个字符的ASCII码值,直到对应位置上出现相异的字符为止,哪个字符串的对应位置上率先出现ASCII码值更大的字符,则对应的字符串更大。


8、strstr

在一个字符串中查找另一个字符串。

函数格式:const char * strstr ( const char * str1, const char * str2 )

函数返回字符串str2在字符串str1第一次出现的位置的指针,只会查找匹配str2的终止字符'\0'前的字符流,并不会查找匹配'\0'

如果匹配不到,则返回NULL。


9、putchar函数

字符输出函数。

函数格式:int putchar(int ch)

ch是字符的ASCII码值,返回值也是这个字符的ASCII码值。

函数作用:将单个字符放入标准输出缓冲区并输出到显示设备上,等价于:

printf("%c",ch);

注意:
1、要使用getchar函数,首先要包含头文件<stdio.h>
2、putchar函数一次只能输出一个字符。如若要输出一长串字符,则需要多次使用putchar函数。
3、putchar函数没有自动换行的功能,若需要换行,则需手动输出'\n',即:putchar('\n')


10、getchar函数

字符输入函数。

函数格式:int getchar()

无参数,返回的返回值是获取到的字符的ASCII码值。

函数作用:从标准输入缓冲区获取单个字符,并将这个字符存入变量。详见:scanf()与标准输入缓冲区

例如:

char ch = getchar();
char ch;
scanf("%c",&ch);

以上两项代码的意义相同。

注意:
1、使用getchar函数时,需要先包含头文件<stdio.h>
2、函数的返回值就是所获取的字符的ASCII码值。


11、puts函数

字符串输出函数。

函数格式:int puts(const char* str)

str是指向需要输出的字符串首字符的字符指针,返回值是判断是否输出成功,若输出成功则返回非负整数,若输出失败则返回**-1**。

作用:从str这个位置开始复制字符,直到遇见第一个终止字符'\0',终止字符'\0'不会被复制,将得到的字符流拷贝的末尾先后加上'\n''\0'(注意,这个终止字符'\0'并不是源字符串上的,而是在提取到字符流后编译器自动加上的),再放入标准输出缓冲区输出并输出到显示设备上。

总结起来就是输出字符串,并自带换行功能。

注意:
1、使用puts函数时,需要先包含头文件<stdio.h>
2、puts函数首先会输出指定的字符串,之后会自动进行换行操作,这与printf函数有所不同。


12、gets函数

字符串输入函数。

函数格式:char* gets (char* str)

str是用于接收字符串的内存空间的首地址,返回的返回值就是这块内存空间的首地址。

作用:gets函数会持续匹配标准输入缓冲区中的一切字符形成字符流,在匹配到'\n'(也就是输入时末尾的回车符)后结束匹配,'\n'也会进入被匹配序列,可匹配序列中只有'\n'前的字符流会被读取,而'\n'会被清除出缓冲区,被读取的字符流末尾会被自动加上终止字符'\0'形成字符串,再被存入以str为首地址的内存空间中。

注意:
1、之前学的用格式化输入函数scanf来获取输入的字符串有一个缺点:不能获取到空白字符。故而引入gets函数。
2、gets函数能连续获取标准输入缓冲区中除'\n'外一切的字符,包括空白字符。
3、总的来说就是:gets会读取标准输入缓冲区里的一切字符形成字符串,并且会清除最末尾的回车符。

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

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

相关文章

ARM 汇编指令:(七) STM/LDM多寄存器加载/多存储指令

一.四种栈 考验大家理解能力的地方来了&#xff0c;专心点&#xff0c;嘿嘿&#xff01;&#xff01; 1.满增栈&#xff1a;进栈&#xff08;先移动指针再入栈&#xff0c;指针往地址增大的方向移动&#xff09;&#xff1b;出 栈&#xff08;先出栈&#xff0c;栈指针往地址…

Java中的IO流是什么?

Java中的IO流&#xff08;Input/Output Stream&#xff09;是Java编程语言中用于处理输入和输出操作的一种重要机制。在Java中&#xff0c;IO流被用来读取和写入数据&#xff0c;这些数据可以来自各种来源&#xff0c;如文件、网络连接、内存缓冲区等。Java的IO流提供了丰富的类…

分享通义ChatGPT实用技能123

前言 作为一名程序员&#xff0c;你一定有过这样的经历&#xff1a;排查某个 bug 花费了好几个小时&#xff0c;在各个搜索引擎尝试搜索&#xff0c;浏览了几十甚至上百个网站&#xff0c;结果搜到的答案千篇一律&#xff0c;没有一个说到点上。而自从有了 ChatGPT&#xff0c…

船舶AIS监控网络-船位信息查询:实时查询船舶动态,服务于船舶安全航行管理、港口调度计划、物流、船代、货代。【AIS动态信息编写船舶轨迹】

文章目录 引言I 预备知识1.1 相关术语1.2 主要功能1.3 MongoDB和Es各自优势II 系统架构2.1 电子海图开源JavaScript包2.2 地图渲染库2.3 地图服务调用(天地图)2.4 在Elasticsearch(ES)中存储船舶轨迹数据III 数据同步方案3.1 基于 Binlog 实时同步3.2 数据迁移工具:Canal3.3…

通过网口或串口走Modbus协议,读写数据库中的数据

智能网关IGT-DSER方便实现多台PLC与数据库之间的数据通讯&#xff0c;既可以读取PLC的数据上报到数据库&#xff0c;也可以从数据库查询数据后写入到PLC的寄存器&#xff0c;还可以将数据库的数据转为Modbus服务端/从站&#xff0c;实现数据库内的数据也可以走Modbus协议通过网…

真空泵系统数据采集远程监控解决方案

行业背景 半导体制造业可以说是现代电子工业的核心产业&#xff0c;广泛应用于计算机、通信、汽车、医疗等领域。而在半导体生产加工过程中&#xff0c;如刻蚀、 镀膜、 扩散、沉积、退火等环节&#xff0c;真空泵都是必不可少的关键设备&#xff0c;它可以构建稳定受控的真空…

SVM实验分析(软硬间隔,线性核,高斯核)

目录 一、前言 二、实验 0. 导入包 1. 支持向量机带来的效果 2. 软硬间隔 3. 非线性支持向量机 4. 核函数变换 线性核 高斯核 对比不同的gamma值对结果的影响 一、前言 学习本文之前要具有SVM支持向量机的理论知识&#xff0c;可以参考支持向量机&#xff08;Support Vector …

零基础如何学习Web 安全,如何让普通人快速入门网络安全?

前言 网络安全现在是朝阳行业&#xff0c;缺口是很大。不过网络安全行业就是需要技术很多的人达不到企业要求才导致人才缺口大 初级的现在有很多的运维人员转网络安全&#xff0c;初级也会慢慢的卷起来&#xff0c;但是岗位多不用怕&#xff0c;以后各大厂也都会要网络安全人…

Python 数据持久层ORM框架 SQLAlchemy模块

文章目录 ORM 框架SQLAlchemy 简介SQLAlchemy 作用SQLAlchemy 原理SQLAlchemy 使用流程数据库驱动配置关系型数据库配置NoSQL数据库配置 创建引擎(Engine)定义模型类(ORM)创建会话(Session)创建数据库表其他关键字参数&#xff0c;这些参数将传递给底层的 DDL 创建函数。 删除数…

MyBatis动态语句 -- trim/choose/when/otherwise标签

1. trim标签 使用trim标签控制条件部分两端是否包含某些字符 prefix属性&#xff1a;指定要动态添加的前缀suffix属性&#xff1a;指定要动态添加的后缀prefixOverrides属性&#xff1a;指定要动态去掉的前缀&#xff0c;使用“|”分隔有可能的多个值suffixOverrides属性&…

Elastic Stack--09--ElasticsearchRestTemplate

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 spring-data-elasticsearch提供的APIQueryBuildersElasticsearchRestTemplate 方法ElasticsearchRestTemplate ---操作索引 ElasticsearchRestTemplate ---文档操作…

使用vue 实现跨域访问第三方http请求

目录 1、需要配置vue的拦截器vue.config,js 2、引用 axios 3、被请求端需要设置允许跨域 1、需要配置vue的拦截器vue.config,js 代码如下&#xff1a; const path require(path) const url http://127.0.0.1:19043/ module.exports { dev: { // Paths assetsSubDirec…

指针【理论知识速成】(3)

一.指针的使用和传值调用&#xff1a; 在了解指针的传址调用前&#xff0c;先来额外了解一下 “传值调用” 1.传值调用&#xff1a; 对于来看这个帖子的你相信代码展示胜过千言万语 #include <stdio.h> #include<assert.h> int convert(int a, int b) {int c 0…

LeetCode344 -反转字符串

LeetCode344 反转字符串 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1&#xff1a; 输入&#xff1a;s [“…

Vue template到render过程,以及render的调用时机

Vue template到render过程 vue的模版编译过程主要如下&#xff1a;template -> ast -> render函数&#xff08;1&#xff09;调用parse方法将template转化为ast&#xff08;抽象语法树&#xff09;&#xff08;2&#xff09;对静态节点做优化&#xff08;3&#xff09;生…

Linux编程4.1 网络编程-前导

1、内容概述 网络的基本概念TCP/IP协议概述OSI和TCP/IP模型掌握TCP协议网络基础编程掌握UDP协议网络基础檹网络高级编程 2、计算机联网的目的 使用远程资源共享信息、程序和数据分布处理 3、基本概念 单服务与多客户端的进程间通信C/S client server 由于&#xff0c;跨计…

模型量化(二)—— 训练后量化PTQ(全代码)

训练后量化&#xff08;Post-training Quantization&#xff0c;PTQ&#xff09;是一种常见的模型量化技术&#xff0c;它在模型训练完成之后应用&#xff0c;旨在减少模型的大小和提高推理速度&#xff0c;同时尽量保持模型的性能。训练后量化对于部署到资源受限的设备上&…

【Android】TextView前增加红色必填项星号*

自定义属性 <?xml version"1.0" encoding"utf-8"?> <resources><declare-styleable name"NecessaryTextView"><attr name"necessary" format"boolean" /></declare-styleable> </resou…

通过对话式人工智能实现个性化用户体验

智能交流新时代&#xff1a;如何选择对话式人工智能产品 在快速发展的数字环境中&#xff0c;对话式人工智能正在彻底改变企业与客户互动的方式。 通过集成机器学习、自然语言处理和语音识别等先进技术&#xff0c;对话式人工智能可提供个性化、无缝的用户体验。 了解对话式人…

中间件 | Kafka - [常见问题]

INDEX 1 消息丢失1.1 消息丢失位置1.2 如何避免消息丢失 2 顺序消费 1 消息丢失 1.1 消息丢失位置 1&#xff1a;producer 向 kafka 投递消息时2&#xff1a;kafka-topic 中 leader 已经写入了消息&#xff0c;向副本写入消息前挂了时3&#xff1a;消费者从 kafka 拉取了消息&…