十一、C语言:字符串函数

news2024/11/26 2:45:36

目录

一、strlen

二、strcpy

三、strcat

 四、strcmp

五、strstr

六、strtok

七、strerror


一、strlen

注意:strlen()函数的返回值是size_t,两个size_t相减仍为无符号数

int main()
{
	char arr[10] = "abc";
	char brr[10] = "abc123";
	if (strlen(arr) - strlen(brr) > 0)
		printf("strlen(arr) > strlen(brr)");   //打印
	if (strlen(arr) - strlen(brr) <= 0)
		printf("strlen(arr) <= strlen(brr)");
	return 0;
}

二、strcpy

char* strcpy(char * destination, char * source);

1. 源字符串必须以'\0'结束;

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

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

4.目标空间必须可变。

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

int main()
{
	char arr[10] = "##########";
	char* p = "world";
	strcpy(arr, p);
	strcpy(arr, "hello");
	printf("%s", arr);
	return 0;
}

 可以看到,复制world时,会将其末尾的'\0'也复制过去

 2.2源字符串必须以'\0'结束

brr数组中末尾没有'\0',所以strcpy时不知道复制多少到arr中;

但char brr[10] = {'a','a', 'a', 'a', 'a', 'a'};,brr[6]之后数组中存储的就是'\0'

int main()
{
	char arr[10] = "##########";
	char brr[6] = {'a','a', 'a', 'a', 'a', 'a'};
	strcpy(arr, brr);
	printf("%s", brr);  //err
	return 0;
}


三、strcat

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

int main()
{
	char arr[20] = "hello ";
	char* p = "world";
	strcat(arr, p);
	printf("%s", arr);
	return 0;
}

3.1 strcat是从目标字符串中的第一个'\0'开始添加的 

int main()
{
	char arr[20] = "hello \0##########";
	char* p = "world";
	strcat(arr, p);
	printf("%s", arr);
	return 0;
}

3.2 模拟实现strcat

#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strcat(char* dest, const char* src)
{
	assert(dest && src);
	char* ret = dest;
	while (*dest)
	{
		dest++;
	}
	for (int i = 0; src[i] != '\0'; i++)
	{
		dest[i] = src[i];
	}
	return ret;
}
int main()
{
	char arr[20] = "hello ";
	char brr[] = "world";
	//my_strcat(arr, brr);
	//printf("%s\n", arr);
	printf("%s\n", my_strcat(arr,brr));
	return 0;
}


 四、strcmp

1.两个字符串相等,返回0;

2.两个字符串不相等,依次比较单个字符的ASCII值大小;

"aba", "aaa" 第一个字符均为'a';比较第二个,'b'大于'a'返回1,否则返回-1

4.1 使用 

int main()
{
	int res1 = strcmp("aaa","aaa");
	int res2 = strcmp("aba", "aaa");
	int res3 = strcmp("aaa", "aca");
	printf("%d\n", res1);  //0
	printf("%d\n", res2);  //1
	printf("%d\n", res3);  //-1
	return 0; 
}

4.2 模拟实现strcmp

int my_strcmp(const char* s1, const char* s2)
{
	for (int i = 0; s1[i] != '\0'; i++)
	{
		if (s1[i] != s2[i])
		{
			if (s1[i] > s2[i])
				return 1;
			else
				return -1;
		}
	}
	return 0;
}
int main()
{
	int res1 = my_strcmp("aaa","aaa");
	int res2 = my_strcmp("aba", "aaa");
	int res3 = my_strcmp("aaa", "aca");
	printf("%d\n", res1);
	printf("%d\n", res2);
	printf("%d\n", res3);
	return 0;
}


五、strstr

5.1 使用

int main()
{
    char arr[] = "This is a simple string";
    char* pch1;
    pch1 = strstr(arr, "simple");
    printf("%s", pch1);   //simple string
    return 0;
}

5.2 模拟实现strstr



六、strtok

char* strtok(char* str, const char* sep);
1.sep 参数是个字符串,定义了用作分隔符的字符集合;
2.第一个参数指定一个字符串,它包含了 0 个或者多个由 sep字符串中一个     或者多个分隔符分割的标记;
3. strtok 函数找到 str 中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。注: strtok 函数会改变被操作的字符串,所以在使用 strtok 函数切分的字符串一般都是临时拷贝的内容 并且可修改。)
4.strtok 函数的第一个参数不为 NULL, 函数将找到 str 中第一个标记, strtok 函数将保存它在字符串 中的位置;
5.strtok 函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记;
6.如果字符串中不存在更多的标记,则返回 NULL 指针。
int main()
{
    char arr[] = "zpw@bitedu.tech  hehe";
    char* p = "@. ";
    //strtok会改变字符串,因此需要复制一份
    char tmp[30] = {0};
    strcpy(tmp, arr);
    char* ret = NULL;

    for (ret = strtok(tmp, p); ret != NULL; ret = strtok(NULL, p))
        printf("%s\n", ret);
    return 0;
}

输出:zpw

           bitedu

           tech

           hehe 



七、strerror

char * strerror ( int errnum );

1.使用库函数的时候,调用库函数失败时,都会设置错误码

2.int errno 是一个全局变量

3.使用时必须添加#include <errno.h>头文件

int main()
{
  FILE * pFile;
  pFile = fopen ("test.txt","r");
  if (pFile == NULL)
    printf ("%s\n", strerror(errno));
  return 0;
}

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

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

相关文章

高基数 GroupBy 在 SLS SQL 中的查询加速

作者&#xff1a;顾汉杰&#xff08;执少&#xff09; 什么是高基数 GroupBy 简单来说&#xff0c;想要分析的数据&#xff0c;拥有超多的“唯一值计数”&#xff08;Distinct Count&#xff09;&#xff0c;而我们需要对这些数据进行分组分析&#xff08;如统计次数、排名、…

如何高效调试JavaScript代码:从Console到断点调试

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介如何高效调试JavaScript代码&#xff1a;从Console到断点调试1. 引言2. 基本调试工具概览2.1 浏览器开发者工具&#xff08;DevTools&#xff09;如何打开浏览器开发者工具&#xff1f; 2.2 常用的调试面板 3. 基本调试方法3.1 使用…

Springboot邮箱发送:如何快速集成并发信?

Springboot邮箱发送性能如何&#xff1f;怎么用SpringBoot发信&#xff1f; Springboot作为一款流行的Java框架&#xff0c;提供了简便的方式来集成邮件发送功能。AokSend将详细介绍如何快速集成Springboot邮箱发送功能&#xff0c;并实现高效的邮件发送。 Springboot邮箱发送…

考拉悠然产品发布会丨以悠然远智全模态AI应用平台探索AI行业应用

9月6日&#xff0c;成都市大模型新技术新成果发布暨供需对接系列活动——考拉悠然专场&#xff0c;在成都市高新区菁蓉汇盛大举行。考拉悠然重磅发布了悠然远智丨全模态AI应用平台&#xff0c;并精彩展示了交通大模型应用——智析快处等最新的AI产品和技术成果。 在四川省科学…

警用车载4G5G无线视频监控技术方案

目录 一、背景 二、系统方案设计 1.1系统架构 1.2车载终端 1.3监控中心 1.4传输网络 三、警用车载监控功能特点 2.1警用车载监控功能 &#xff08;1&#xff09;实时视频监控 &#xff08;2&#xff09;录像存储回放 &#xff08;3&#xff09;车载报警联动 &#…

如何清理C盘临时文件,释放10G以上空间

在我们日常使用电脑系统的过程中&#xff0c;想必大家都曾遇到过这样的情况&#xff1a;明明没有主动安装任何软件&#xff0c;然而 C 盘的可用空间却逐渐减少&#xff0c;甚至有时会收到系统发出的空间不足的提醒。 其实&#xff0c;在系统中存在这样一个至关重要的临时文件夹…

【Prometheus】PromQL聚合函数详细用法与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

基于springboot+vue乒乓球预约管理系统

基于springbootvuemysql实现的乒乓球预约管理系统&#xff08;源码数据库部署视频&#xff09; ### 主要技术 SpringBoot、LayUI、Vue、MySQL ### 系统角色 用户、管理员 ### 系统功能 前台&#xff1a; 首页、乒乓球场、公告信息、留言反馈、个人中心 后台&#xff1a; …

Nginx解析:入门笔记

&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》《MYSQL》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 ✨欢迎加入探索nginx之旅✨ &#x1f44b; 大家好&#xff01;文本学习和探索Nginx配置。…

【C++ Primer Plus习题】13.2

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream> #include "classic.h&quo…

数据同步-Mysql同步到ElasticSearch

Mysql同步到ElasticSearch 数据同步1、定时任务2、双写3、MQ异步写入4、Logstash5、Canal 数据同步 一般情况下&#xff0c;如果做查询搜索功能&#xff0c;使用 ES 来模糊搜索&#xff0c;但是数据是存放在数据库 MySQL 里的&#xff0c;所以说我们需要把 MySQL 中的数据和 E…

身份证识别及信息核验 API 对接说明

身份证识别及信息核验 API 对接说明 本文将介绍一种 身份证识别及信息核验 API 对接说明&#xff0c;它可以通过输入身份证图片 或 姓名和身份证号码&#xff0c;来校验姓名和身份证号的真实性和一致性。本接口用于校验姓名和身份证号的真实性和一致性&#xff0c;您可以通过输…

SOMEIP_ETS_098: SD_ClientService_subscribe_without_method_call

测试目的&#xff1a; 验证当测试器激活DUT的ETS客户端服务模式并发送OfferService消息时&#xff0c;DUT不会尝试订阅每个接收到的OfferService&#xff0c;因为测试器没有发送必要的clientServiceSubscribeEventgroup消息。 描述 本测试用例旨在确保DUT在没有收到clientSe…

SuiNS的成就与未来愿景

是Sui上领先的域名服务&#xff0c;通过用用户友好、易记的域名替换复杂的钱包地址&#xff0c;提升了链上交互。在过去的两年中&#xff0c;SuiNS经过了多次改进和优化&#xff0c;致力于创建易于理解的链上身份。 借鉴社交媒体的常见用法&#xff0c;SuiNS更进一步&#xff…

这样的接口幂等实现我认为最为优雅(防重复提交)

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 这样的接口幂等实现我认为最为优雅 基于token(和网上大部分不一样)对比构思需要幂等性的场景不需…

【无人机设计与控制】用于四轴飞行器仿真和控制系统设计的参数驱动的 Simulink 模型

摘要 本文介绍了一种用于四轴飞行器仿真和控制系统设计的参数驱动Simulink模型。该模型通过参数化设置&#xff0c;允许用户对四轴飞行器的关键性能参数&#xff08;如质量、转动惯量、推力系数等&#xff09;进行调整&#xff0c;从而研究不同参数对飞行器性能的影响。通过此…

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。用…

论文学习:常用的遥感参数

文章目录 归一化植被指数&#xff08;NDVI&#xff09;归一化红外指数7&#xff08;NDII7&#xff09;温度植被干旱指数&#xff08;TVDI&#xff09;归一化燃烧指数&#xff08;NBR&#xff09;差分归一化燃烧指数&#xff08;dNBR&#xff09;植被覆盖率&#xff08;VFC&…

2万字长文,如何成为一个“懂”AI 的产品经理?

产品经理比起大模型产品&#xff0c;更应该关注大模型本身。 注&#xff1a;随着时间推移&#xff0c;文章中的结论可能会发生变化。 此外&#xff0c;本文面向的读者是非算法团队的产品经理&#xff0c;为了保障文章的可读性&#xff0c;可能会省略部分细节&#xff0c;同时…

值得入手的 5 大数据恢复软件,数据恢复那是又快又全!

在日常工作与生活中&#xff0c;数据丢失的情况屡见不鲜。诸如重要文件的不慎误删、电脑系统的骤然崩溃、存储设备受病毒侵袭、格式化操作的失误等&#xff0c;此类突发状况常令人猝不及防。在此情形下&#xff0c;数据恢复软件便成为挽救重要数据的关键利器。 今天&#xff0c…