C语言实例_string.h库函数功能及其用法详解

一、前言

在计算机编程中,字符串处理是一项常见而重要的任务。C语言的string.h头文件提供了一系列函数和工具,用于对字符串进行操作和处理。这些函数包括字符串复制、连接、比较、查找等功能,为开发人员提供了强大的字符串处理能力。本文将对string.h头文件中的所有函数进行全面介绍,包括它们的功能和使用方法,以帮助大家更好地理解和利用该头文件。

image-20231214104045681

二、函数介绍

下面是对每个函数的详细介绍及其功能。

【1】strlen(const char *str)

  • 功能:计算字符串的长度,即字符串中字符的个数,不包括字符串结束符’\0’。
  • 返回值:无符号整数,表示字符串的长度。

【2】strcpy(char *dest, const char *src)

  • 功能:将源字符串复制到目标字符串中,包括字符串结束符’\0’。
  • 返回值:指向目标字符串的指针。

【3】strncpy(char *dest, const char *src, size_t n)

  • 功能:将源字符串的前n个字符复制到目标字符串中,包括字符串结束符’\0’。如果源字符串长度不足n,则在目标字符串末尾填充’\0’。
  • 返回值:指向目标字符串的指针。

【4】strcat(char *dest, const char *src)

  • 功能:将源字符串连接到目标字符串的末尾,包括字符串结束符’\0’。
  • 返回值:指向目标字符串的指针。

【5】strncat(char *dest, const char *src, size_t n)

  • 功能:将源字符串的前n个字符连接到目标字符串的末尾,包括字符串结束符’\0’。如果源字符串长度不足n,则在目标字符串末尾填充’\0’。
  • 返回值:指向目标字符串的指针。

【6】strcmp(const char *str1, const char *str2)

  • 功能:比较两个字符串的大小关系。
  • 返回值:整数值,当str1小于str2时返回负数,当str1等于str2时返回0,当str1大于str2时返回正数。

【7】strncmp(const char *str1, const char *str2, size_t n)

  • 功能:比较两个字符串的前n个字符的大小关系。
  • 返回值:整数值,当str1小于str2时返回负数,当str1等于str2时返回0,当str1大于str2时返回正数。

【8】strchr(const char *str, int c)

  • 功能:在字符串中查找第一次出现指定字符c的位置。
  • 返回值:指向第一次出现指定字符的指针,如果未找到则返回NULL。

【9】strrchr(const char *str, int c)

  • 功能:在字符串中查找最后一次出现指定字符c的位置。
  • 返回值:指向最后一次出现指定字符的指针,如果未找到则返回NULL。

【10】strstr(const char *haystack, const char *needle)

  • 功能:在字符串haystack中查找第一次出现子字符串needle的位置。
  • 返回值:指向第一次出现子字符串的指针,如果未找到则返回NULL。

【11】strtok(char *str, const char *delim)

  • 功能:将字符串分割为一系列子字符串,使用delim中的字符作为分隔符。
  • 返回值:指向分割得到的子字符串的指针,如果字符串已经被完全分割,则返回NULL。

【12】memset(void *ptr, int value, size_t num)

  • 功能:将指定的内存块(由ptr指向)的前num个字节都设置为特定值value。
  • 返回值:指向内存块的指针。

【13】memcpy(void *dest, const void *src, size_t num)

  • 功能:将源内存块(由src指向)的前num个字节复制到目标内存块(由dest指向)中。
  • 返回值:指向目标内存块的指针。

【14】memmove(void *dest, const void *src, size_t num)

  • 功能:将源内存块(由src指向)的前num个字节复制到目标内存块(由dest指向)中,可以处理内存块的重叠。
  • 返回值:指向目标内存由于回答的字符数限制,无法一次性提供完整的函数介绍。以下是续写部分:

【15】memcmp(const void *ptr1, const void *ptr2, size_t num)

  • 功能:比较两个内存块的前num个字节的大小关系。
  • 返回值:整数值,当ptr1小于ptr2时返回负数,当ptr1等于ptr2时返回0,当ptr1大于ptr2时返回正数。

【16】memchr(const void *ptr, int value, size_t num)

  • 功能:在内存块中查找第一次出现指定值value的位置。
  • 返回值:指向第一次出现指定值的指针,如果未找到则返回NULL。

【17】memmove_s(void *dest, rsize_t destsz, const void *src, rsize_t count)

  • 功能:将源内存块(由src指向)的前count个字节复制到目标内存块(由dest指向)中,可以处理内存块的重叠。确保目标内存块的大小为destsz。
  • 返回值:错误码,0表示成功,非零值表示失败。

三、代码示例

以下是对每个函数的用法示例:

【1】strlen(const char *str):

#include <stdio.h>
#include <string.h>int main() {const char *str = "Hello, world!";int length = strlen(str);printf("The length of the string is: %d\n", length);return 0;
}

【2】strcpy(char *dest, const char *src):

#include <stdio.h>
#include <string.h>int main() {char dest[20];const char *src = "Hello, world!";strcpy(dest, src);printf("The copied string is: %s\n", dest);return 0;
}

【3】strncpy(char *dest, const char *src, size_t n):

#include <stdio.h>
#include <string.h>int main() {char dest[20];const char *src = "Hello, world!";strncpy(dest, src, 5);dest[5] = '\0';  // Ensure null-terminationprintf("The copied string is: %s\n", dest);return 0;
}

【4】strcat(char *dest, const char *src):

#include <stdio.h>
#include <string.h>int main() {char dest[20] = "Hello";const char *src = ", world!";strcat(dest, src);printf("The concatenated string is: %s\n", dest);return 0;
}

【5】strncat(char *dest, const char *src, size_t n):

#include <stdio.h>
#include <string.h>int main() {char dest[20] = "Hello";const char *src = ", world!";strncat(dest, src, 3);dest[8] = '\0';  // Ensure null-terminationprintf("The concatenated string is: %s\n", dest);return 0;
}

【6】strcmp(const char *str1, const char *str2):

#include <stdio.h>
#include <string.h>int main() {const char *str1 = "apple";const char *str2 = "banana";int result = strcmp(str1, str2);if (result < 0) {printf("str1 is less than str2\n");} else if (result > 0) {printf("str1 is greater than str2\n");} else {printf("str1 is equal to str2\n");}return 0;
}

【7】strncmp(const char *str1, const char *str2, size_t n):

#include <stdio.h>
#include <string.h>int main() {const char *str1 = "apple";const char *str2 = "application";int result = strncmp(str1, str2, 3);if (result < 0) {printf("str1 is less than str2\n");} else if (result > 0) {printf("str1 is greater than str2\n");} else {printf("str1 is equal to str2\n");}return 0;
}

【8】strchr(const char *str, int c):

#include <stdio.h>
#include <string.h>int main() {const char *str = "Hello, world!";char *ptr = strchr(str, 'o');if (ptr != NULL) {printf("The first occurrence of 'o' is at index: %ld\n", ptr - str);} else {printf("The character 'o' is not found\n");}return 0;
}

【9】strrchr(const char *str, int c):

#include <stdio.h>
#include <string.h>int main() {const char *str = "Hello, world!";char *ptr = strrchr(str, 'o');if (ptr != NULL) {printf("The last occurrence of 'o' is at index: %ld\n", ptr - str);} else {printf("The character 'o' is not found\n");}return 0;
}

【10】strstr(const char *haystack, const char *needle):

#include <stdio.h>
#include <string.h>int main() {const char *haystack = "Hello, world!";const char *needle = "world";char *ptr = strstr(haystack, needle);if (ptr != NULL) {printf("The substring '%s' is found at index: %ld\n", needle, ptr - haystack);} else {printf("The substring '%s' is not found\n", needle);}return 0;
}

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

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

相关文章

计算机中的数据运算

放上计算机中的数据的表示方法 计算机中的数据表示方法-CSDN博客 补码的运算&#xff1a; 连同符号位一起相加&#xff0c;符号位产生的进位自然丢掉&#xff0c;这里要特别注意机器数的位数&#xff0c;计算数的位数决定了可以存放的数据的大小&#xff0c;加减产生的数据的…

ATTCK视角下的信息收集:主机发现

目录 1、利用协议主动探测主机存活 利用ICMP发现主机 利用ARP发现主机 利用NetBIOS协议发现主机 利用TCP/UDP发现主机 利用DNS协议发现主机 利用PRC协议发现主机程序 2、被动主机存活检测 利用Browser主机探测存活主机 利用ip段探测主机存活 利用net命令探测主机存活…

【软件测试】学习笔记-测试覆盖率

测试覆盖率通常被用来衡量测试的充分性和完整性&#xff0c;从广义的角度来讲&#xff0c;测试覆盖率主要分为两大类&#xff0c;一类是面向项目的需求覆盖率&#xff0c;另一类是更偏向技术的代码覆盖率。 需求覆盖率 需求覆盖率是指测试对需求的覆盖程度&#xff0c;通常的做…

UAV | 多算法在多场景下的无人机路径规划(Matlab)

近年来&#xff0c;无人机(unmanned aerial vehicle&#xff0c;UAV)由于其灵活度高、机动性强、安全风险系数小、成本低等特点&#xff0c;被广泛应用于搜索巡逻、侦察监视、抢险救灾、物流配送、电力巡检、农业灌溉等军用或民用任务。路径规划是无人机执行任务的关键&#xf…

第34期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大型语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以…

数据结构之绪论

一个著名公式&#xff1a; 程序数据结构算法 非数值计算&#xff1a;无法用数学的公式或方程来描述 描述非数值计算问题的数据模型不是数学方程&#xff0c;而是诸如表&#xff0c;树和图之类的具有逻辑关系的数据 数据结构&#xff1a;是一门研究非数值计算的程序设计中计算机…

pyqt6 + pycharm 搭建+使用入门

首先安装PyQt6和PyQt6-tools。使用如下命令&#xff1a; pip install PyQt6 PyQt6-tools 但是运行后会报如下错误&#xff1a; 这个时候按照提示执行命令升级pip即可 python.exe -m pip install --upgrade pip 配置pycharm&#xff1a; 打开pycharm&#xff0c;进入setting&am…

大事务提交优化

经常性的报死锁异常&#xff0c;经常性的主从延迟......通过报错信息按图索骥&#xff0c;发现代码是这样的。 这是一段商品发布的逻辑&#xff0c;我们可以看到参数校验、查询、最终的insert以及update全部揉在一个事务中。遇到批量发布商品的时候就经常出现问题了&#xff0c…

css实现一个斑马条纹动画,实现一个理发店门口的小转转,进度条动画同理!

css实现一个斑马条纹动画&#xff0c;实现一个理发店门口的小转转 前置基础知识 css背景background的重复渐变属性repeating-linear-gradient() 该属性类似于linear-gradient(),但他会在整个方向上重复渐变以覆盖整个容器 一、先写一个普通渐变例子linear-gradient() &…

【JAVA】volatile 关键字的作用

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 volatile 的作用&#xff1a; 结语 我的其他博客 前言 在多线程编程中&#xff0c;保障数据的一致性和线程之间的可见性是…

复旦MBA科创青干营(二期):探索合肥科创企业的创新之路

11月18日-19日&#xff0c;复旦MBA科创青干营二期学生开启了整合实践活动的第三次企业参访&#xff0c;前往位于合肥的蔚来第二先进制造基地、安徽万邦医药科技股份有限公司和合肥国轩高科动力能源有限公司&#xff0c;在学术导师和科创企业家“双导师”的指导下&#xff0c;深…

【C++】STL 算法 ④ ( 函数对象与谓词 | 一元函数对象 | “ 谓词 “ 概念 | 一元谓词 | find_if 查找算法 | 一元谓词示例 )

文章目录 一、函数对象与谓词1、一元函数对象2、" 谓词 " 概念3、find_if 查找算法 二、一元谓词示例1、代码示例 - 一元谓词示例2、执行结果 一、函数对象与谓词 1、一元函数对象 " 函数对象 " 是通过 重载 函数调用操作符 () 实现的 operator() , 函数对…

【数值分析】非线性方程求根,牛顿法,牛顿下山法,matlab实现

4. 牛顿法 收敛时牛顿法的收敛速度是二阶的&#xff0c;不低于二阶。如果函数有重根&#xff0c;牛顿法一般不是二阶收敛的。 x k 1 x k − f ( x k ) f ′ ( x k ) x_{k1}x_k- \frac{f(x_k)}{f(x_k)} xk1​xk​−f′(xk​)f(xk​)​ matlab实现 %% 牛顿迭代例子 f (x) x…

创建Qt项目

项目工程名称一般不要有特殊符号&#xff0c;不要有中文 项目工程保存路径可修改的&#xff0c;但路径不要带中文 构建系统&#xff0c;有3种&#xff0c;这里使用qmake qmake和cmake区别 构建过程不同&#xff0c;项目管理不同。 1、构建过程&#xff0c;qmake是Qt框架自带的…

MySQL数据库:索引

目录 一. 索引的价值 二. 数据库与磁盘的IO 2.1 磁盘的结构 2.2 磁盘访问 2.3 MySQL与磁盘的交互 三. 对索引的理解 3.1 Page的结构 3.2 B树和B树索引结构 3.2.1 B树的结构 3.2.2 B树 3.3 聚簇索引和非聚簇索引 四. 索引的操作 4.1 索引的创建 4.2 索引的查看 4.…

new FormData 同时发送表单 json 以及文件二进制流

需要新增时同时发送表单 json 以及对应的文件即可使用以下方法传参 let formDataParams new FormData(); 首先通过 new FormData&#xff08;&#xff09; 创建你需要最后发送的表单 接着将你的对象 json 存储&#xff0c;注意使用 new Blob 创建大表单转换成 json 格式。以…

解决:TypeError: ‘tuple’ object does not support item assignment

解决&#xff1a;TypeError: ‘tuple’ object does not support item assignment 文章目录 解决&#xff1a;TypeError: tuple object does not support item assignment背景报错问题报错翻译报错位置代码报错原因解决方法方法一&#xff1a;方法二&#xff1a;今天的分享就到…

【Flink精讲】Flink数据延迟处理

面试题&#xff1a;Flink数据延迟怎么处理&#xff1f; 将迟到数据直接丢弃【默认方案】将迟到数据收集起来另外处理&#xff08;旁路输出&#xff09;重新激活已经关闭的窗口并重新计算以修正结果&#xff08;Lateness&#xff09; Flink数据延迟处理方案 用一个案例说明三…

开源许可证

文章目录 一、简介二、详细信息参考 一、简介 开源是指公开源代码&#xff0c;但这并不代表就是免费的。 开源许可证是一种法律许可。 通过它&#xff0c;版权拥有人明确允许&#xff0c;用户可以免费地使用、修改、共享版权软件。 版权法默认禁止共享&#xff0c;也就是说&am…

如何选择消息队列?Kafka 与 RabbitMQ

在上一期中&#xff0c;我们讨论了使用消息队列的好处。然后&#xff0c;我们回顾了消息队列产品的历史。现在看来&#xff0c;当我们需要在项目中使用消息队列时&#xff0c;Kafka 是首选产品。但是&#xff0c;当我们考虑特定要求时&#xff0c;它并不总是最佳选择。 数据库…