c语言学习笔记之字符串库函数和逗号表达式

逗号表达式

#include <stdio.h>int main(){int a = 10;int b =5;int c = 6;int d = (a = 2+3,b = a-4,c= b+2);printf("%d",d);
}

打印结果为:
在这里插入图片描述
逗号表达式,从左往右依次进行,将最后一个表达式的值赋值给变量.

c语言字符串相关库函数

求字符串长度strlen
长度不受限制的字符串函数strcpy , strcat , strcmp
长度受限制的字符串函数strncpy , strncat , strncmp
字符串查找strstr , strtok
错误信息报告strerror
内存操作函数memcpy , memmove , memset , memcmp

下面分别进行详细介绍

strlen <----求字符串长度

所需头文件

#include <string.h>

参数类型

size_t strlen(const char* string);

参数类型为char*,因此我们传进来的参数需要是字符串的地址,并且这里的指针变量用const修饰,可以保证传进来的字符串不被修改. 因为我们求字符串的长度是不需要对字符串进行修改的,加上const保证程序的安全. size_t是函数的返回值类型,他是一个无符号整型. 关于这个无符号整形,会导致一些问题,可以用一个例子说明.

#include <stdio.h>
#include <string.h>
int main()
{char* str1 = "abc";char* str2 = "abcedf";if (strlen(str1) - strlen(str2) > 0){printf("str1 is bigger\n");}else{printf("str2 is bigger\n");}return 0;
}

我们可以看出,str1比str2短,因此结果应该为负数,小于0,打印str2 is bigger. 但是运行程序,发现结果如下:
在这里插入图片描述
这和我们所认为的不同,就是因为strlen函数返回的是一个无符号整型,因此当两个无符号整型进行减法的时候,得到的结果仍然是无符号整型,因此虽然得到的结果为负数,但是在无符号整型看来,这是一个很大的正数,前面的符号位被认为是一个有效的数字位,导致结果大于0.打印的是str1 is bigger. 如果想要进行比较长度大小,可以直接strlen(str1) > strlen(str2)这样子比较就没有问题了.

注意事项

  1. strlen函数返回的是在字符串中 \0 前面出现的字符个数(不包含 ‘\0’ ),因此当字符串中存在\0的时候,得到的不是字符串的长度
  2. 参数指向的字符串必须要以 ‘\0’ 结束,否则strlen会运行到读取到\0才结束
  3. 注意函数的返回值为size_t,是无符号的,在计算的时候要注意

strcpy<----字符串拷贝

所需头文件

#include <string.h>

参数类型

char *strcpy(char *strDestination,const char* strSource);

参数类型是两个字符串指针地址,第一个是需要被拷贝的字符串地址,第二个参数是要拷贝的内容. 其中要拷贝的内容由于不需要改变,用const修饰,保证程序的安全. 函数的返回值类型为char*类型,是拷贝完成后的字符串地址.

注意事项

  1. strSource必须以\0结束,否则strcpy函数不知道什么时候拷贝结束
  2. 拷贝会将\0也拷贝到strDestination中
  3. strDestination必须足够大,确保放的下strSource,防止越界访问
  4. strDestination不能被const修饰,必须是可变的.

strcat<—字符串追加

所需头文件

#include <string.h>

参数类型

char *strcat(char *strDestination,const char* strSource);

参数类型和strcpy是一致的,就不再赘述了. 返回值类型也是char*类型.用来返回被追加后的字符串地址.

具体功能是将两个字符串拼接起来.

#include <stdio.h>
#include <string.h>
int main()
{char str1[20] = "abcd";char str2[] = "efgh";char* ret = strcat(str1, str2);printf("%s", ret);return 0;
}

运行结果如下:
在这里插入图片描述

strcat的注意事项和strcpy类似,唯一的区别在于strDestination的空间要足够大,能够放得下strSource+原strDestination才行.而strcpy只需要能够放得下strSource就行.

strcmp<—字符串比较

所需头文件

#include <string.h>

参数类型

int strcmp(const char *string1,const char* string2);

参数为两个字符串指针,都被const修饰,不需要对字符串进行修改,只是进行比较,保证程序的安全性. 返回值类型为int类型.
strcmp函数对返回值的规定如下:

  • 标准规定
    • 第一个字符串大于第二个字符串,返回大于0的数字
    • 第一个字符串等于第二个字符串,返回0
    • 第一个字符串小于第二个字符串,返回小于0的数字

strcmp函数的功能就是比较两个字符串的大小,比较的是字符串的内容而不是字符串的长度.
比方说abcde就小于accd因为从第二个字符开始,b的ASCII码小于c的ASCII码. 但字符串的长度确实abcde大于accd

strncpy<—受限制的字符串拷贝

所需头文件

#include <string.h>

参数类型

char *strncpy( char *strDestination,const char *strSource,size_t count);

前两个参数类型和strcpy是一致的,只是多了个size_t类型的参数count用来控制拷贝字符的个数. 这里的count为多少,就从strSource中拷贝多少个字符到strDestination中. 返回值类型也和strcpy一样,返回的是被拷贝的字符串的地址

strncpy的功能如下:

#include <stdio.h>
#include <string.h>
int main()
{char str1[20] = "abcd";char str2[] = "kpl";char* ret = strncpy(str1, str2, 2);printf("%s", ret);return 0;
}

运行结果如下:
在这里插入图片描述
作用就是经str2的前面两个字符串拷贝到str1的前面两位.因此结果为kpcd
注意事项和strcpy是一致的.

strncat<—长度受限制的字符串追加

所需头文件

#include <string.h>

参数类型

char *strncat(char *strDestination,const char* strSource, size_t count);

和strncpy类似,也是多了个size_t类型的count用来控制追加字符串的长度.返回的也是被追加字符串的地址.

#include <stdio.h>
#include <string.h>
int main()
{char str1[20] = "abcd";char str2[] = "efgh";char* ret = strncat(str1, str2, 2);printf("%s", ret);return 0;
}

运行结果为:
在这里插入图片描述
将str2中的前面两个字符追加到str1中,因此结果为abcdef
注意事项和strncat一致.

strncmp<----长度受限制的字符串拷贝

所需头文件

#include <string.h>

参数类型

int strncmp(const char *string1,const char* string2, size_t count);

类似的,多了个size-t类型的count,用来控制比较字符串的长度. 返回的值和strcmp一样.

#include <stdio.h>
#include <string.h>
int main()
{char str1[] = "abcd";char str2[] = "abkl";int ret = strncmp(str1, str2, 2);printf("%d", ret);return 0;
}

运行结果为:
在这里插入图片描述
由于str1和str2前面两个字符都为ab,因此比较的结果是两者相等,因此结果为0
如果使用strcmp比较,结果为小于0的数字.

strstr<----字符串查找函数

所需头文件

#include <string.h>

参数类型

char *strstr(const char *string,const char* strCharSet);

参数是两个指针,分别接收的是被查找的字符串地址和查找内容的字符串地址,两个指针都被const修饰. 返回值类型为char*,所以接收的是字符string被strcharset查找到后,对应查找到的字符串的首地址.

#include <stdio.h>
#include <string.h>
int main()
{char str1[] = "abcdefdgh";char str2[] = "d";char* ret = strstr(str1, str2);printf("%s", ret);return 0;
}

运行结果为:
在这里插入图片描述

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

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

相关文章

Qt开源版 vs 商业版 详细比较!!!!

简单整理Qt开源版与商业版有哪些差别&#xff0c;仅供参考。 简单对比 开源版商业版许可证大部分采用对商业使用不友好的LGPLv3具备商业许可证保护代码专有许可证相关大部分模块使用LGPLv3和部分模块使用GPL组成仅第三方开源组件使用Qt的其他许可证Qt模块功能支持支持技术支持…

海外云手机为什么吸引用户?

近年来&#xff0c;随着全球化的飞速发展&#xff0c;海外云手机逐渐成为各行各业关注的焦点。那么&#xff0c;究竟是什么让海外云手机如此吸引用户呢&#xff1f;本文将深入探讨海外云手机的三大吸引力&#xff0c;揭示海外云手机的优势所在。 1. 高效的社交媒体运营 海外云…

c#窗体捕捉方向键

方法1 实现方法参考代码&#xff1a; private void Form1_Load(object sender, EventArgs e){this.KeyPreview true;}protected override bool ProcessDialogKey(Keys keyData){if (keyData Keys.Left || keyData Keys.Right || keyData Keys.Up || keyData Keys.Down){s…

工程经验分享 Incremental FastPitch

分享 NVIDIA 基于 GPU 的 TTS 解决方案介绍。 1. 基于 FastPitchHifi-GAN 的 Streaming TTS 效果优化 NVIDIA 在 TTS 领域也做了一些供大家参考的工作&#xff0c;例如提供了高效的流式 TTS 部署方案&#xff0c;利用 TensorRT 加速模型推理速度&#xff0c;并通过 Triton Inf…

【软考- 系统集成项目管理工程师2】

第一章-信息化知识-信息与信息化 今日座右铭&#xff1a;最好的偷懒方式&#xff0c;就是一次做好。 文章目录 第一章-信息化知识-信息与信息化前言一、信息1、信息的基本概念2、信息的传输模型3、信息的质量属性 二、信息系统1、系统的基本概念2、信息系统的生命周期 三、信息…

IDEA 安装阿里Java编码规范插件

1.File>Settings 2.安装之后重启 开发过程中如果有不符合规范的地方&#xff0c;会自动出现提示

【C语言/数据结构】排序(归并排序|计数排序|排序算法复杂度)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;《数据结构》https://blog.csdn.net/qinjh_/category_12536791.html?spm1001.2014.3001.5482 ​​​​ 目录 归并排序 代码实现&#xf…

pin to pin替代TI DRV8872的GLOBALCHIP直流电机驱动芯片GC8872,低成本、宽电压,内置电荷泵,短地短电源保护,限流

在现如今电机驱动芯片处于持续涨价的状态下&#xff0c;并且供货期货期长&#xff0c;偶尔缺货的状态下。为了降低设计成本&#xff0c;第一时间设计出优秀的产品占据市场高位。我这边推荐使用浙江GLOBALCHIP国产电机驱动芯片进行替换设计。供货稳定、价格低廉。GC8872是GLOBAL…

Flink实战三_TableAPISQL

接上文&#xff1a;Flink实战二_DataStream API 1、Table API和SQL是什么&#xff1f; 接下来理解下Flink的整个客户端API体系&#xff0c;Flink为流式/批量处理应用程序提供了不同级别的抽象&#xff1a; 这四层API是一个依次向上支撑的关系。 Flink API 最底层的抽象就是有…

CSS之webkit内核中的属性text-stroke

让我为大家介绍一下text-stroke 大家是否想过要弄一个描边过的文字&#xff0c;接下来&#xff0c;text-stroke就可以为你解决 text-stroke是一个复合属性&#xff0c;里面有两个参数&#xff1a;描边的尺寸 描边的颜色 <!DOCTYPE html> <html lang"en">…

[AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言4.5key价格泄漏ChatGPT4.0使用地址ChatGPT正确打开方式最新功能语音助手存档…

蓝桥杯备战——10.超声波模块

1.分析原理图 蓝桥杯单片机板子的原理图做的简直是依托答辩&#xff0c;乱糟糟的不说还弄成黑白的&#xff0c;明明很简单的东西&#xff0c;弄成一大堆。 可以看到&#xff0c;J2跳线帽如果P10接N_A1,P11接N_B1就是用作超声波功能。N_A1用作发生超声波功能&#xff0c;而N_B1…

Android开发之UI控件

TextView 实现阴影效果的textview android:shadowColor"#ffff0000" 设置阴影颜色为红色android:shadowRadius"3" 设置阴影的模糊程度为3android:shadowDx"10" 设置阴影在水平方向的偏移android:shadowDy"10" 设置阴影在竖直方向的偏…

PyFlink使用教程,Flink,Python,Java

环境准备 环境要求 Java 11 Python 3.7, 3.8, 3.9 or 3.10文档&#xff1a;https://nightlies.apache.org/flink/flink-docs-release-1.17/zh/docs/dev/python/installation/ 打开 Anaconda3 Prompt > java -version java version "11.0.22" 2024-01-16 LTS J…

Nginx 1.25配置QUIC和HTTP3

Nginx 1.25配置QUIC和HTTP/3 Nginx在编译时需要配置相应的SSL库&#xff0c;以确保能够支持HTTP3.0和HTTP2.0等基于HTTPS的协议。这些加密算法主要由OpenSSL提供。另外&#xff0c;BoringSSL是谷歌创建的OpenSSL分支&#xff0c;专门用于支持TLS 1.3的UDP协议的0-RTT数据传输加…

2024 年人工智能(AI)会有哪些新趋势和新突破?无际Ai分享

随着科技的不断发展&#xff0c;人工智能领域正在以惊人的速度迈向前所未有的高度。在 2024 年&#xff0c;我们可以期待看到多个领域的重大突破&#xff0c;这将为人工智能技术带来新的应用和可能性。 以下是一些可能出现的新领域和突破性进展&#xff1a; 强化学习应用拓展&…

MySQL前百分之N问题--percent_rank()函数

PERCENT_RANK()函数 PERCENT_RANK()函数用于将每行按照(rank - 1) / (rows - 1)进行计算,用以求MySQL中前百分之N问题。其中&#xff0c;rank为RANK()函数产生的序号&#xff0c;rows为当前窗口的记录总行数 PERCENT_RANK()函数返回介于 0 和 1 之间的小数值 selectstudent_…

MicrosoftEdge浏览器打开网页出现“此网站被人举报不安全”问题时解决办法

1&#xff1a;有时候不知怎么回事用电脑自带的微软浏览器进行搜索会出现以下的问题 这可能是由于我们的浏览器安全审查过于严格引起的 Windows10正式版系统下&#xff0c;使用Edge浏览器浏览网页时候&#xff0c;发现整个页面突然变成了红色&#xff0c;显示“已有人举报此网站…

【高效开发工具系列】markdown转HTML

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

打击者H5小游戏

欢迎来到程序小院 打击者 玩法&#xff1a;点击飞机上下左右移动躲过子弹射击&#xff0c;打掉上方敌人飞机&#xff0c; 遇到药包会增加能量&#xff0c;弹药包会升级武器&#xff0c;快去射击吧^^。开始游戏https://www.ormcc.com/play/gameStart/262 html <div id"…