C语言从头学31——与字符串变量相关的几个函数
strlen、strcpy、strcat、strcmp、sprintf这些函数都是与字符串相关的,除了sprintf是定义在stdio.h中外,其余几个都定义在string.h中,比较新的编译器版本stdio.h中已经含有string.h的内容,所以编程时不需要再包含string.h这个头文件。 但由于版本不同,如某个函数编译器不能识别,则请包含string.h头文件。
1、strlen()
函数strlen的功能是返回字符串的字符长度 (不包括字符串末尾的 "\0" )。
使用格式:strlen (参1);
参1:字符串指针、字符串常量
返回值:size_t 类型的无符号整数 (一般可理解成是int,也可用int型强转)
用法举例:
char* str = "C语言从头学"; //写成str[]或str[1024]不影响结果
int num = strlen(str); //结果:11 (一个汉字2个字节加上字母C)
说明:
注意区分 strlen 和 sizeof 的区别,如下:
char s[]="a"; strlen返回1,sizeof返回2( 包括\0 )
char s[1024]="a"; strlen返回1,sizeof返回1024(声明的长度)
char* s="a"; strlen返回1,sizeof返回4或8(sizeof返回的是指针变量的字节长度,系统不同有所区别)
所以,当我们需要的是字符串的具体长度时,还是使用strlen为好。
2、strcpy()
函数 strcpy 的功能是为字符串数组赋值。(字符串数组不能使用等号 "=" 赋值<初值除外>,这个函数是通过复制内存地址的方法将一个字符串变量拷贝给另一个)
使用格式:strcpy(参1,参2);
参1 目标字符串变量(字符数组形式)
参2 源字符串(常量、数组变量、指针)
返回值:指向参1 的char*指针
用法举例:
char* str="C语言从头学";
// 写成 str[] 或 str[1024]也可,只要实际字符串长度(开始至"\0")小于目标变量声明长度即可正常完成复制
char s[1024]; //声明的目标字符串变量(字符数组)
strcpy(s,str);
说明:
a.目标变量声明的字节长度必须大于等于源字符串长度strlen()+1(1是考虑 \0 所占位置);strcpy不对目标、源两个变量的长度进行比较,这一点必须注意。
b.目标变量不能使用 char* 声明的变量。
c.这个函数的重要用途之一就是修改字符数组的值,除了声明时可用 "=" 赋初值外,其它场合都不能用 "=" 赋值,除非一个字符一个字符的修改。
3、strcat()
函数 strcat 的功能是连接字符串(将参2接续到参1结尾)
使用格式:strcat(参1,参2);
参1 字符串变量(字符数组名)
参2 字符串(常量、数组变量、指针)
返回值:指向参1 的 char* 型指针
用法举例:
char str[1024]="C语言从头学";
char* s="有必要。";
strcat(str,s); //str的值:C语言从头学有必要。
说明:
参数1的声明长度应能包含参2的长度,否则一旦溢出容易造成运行错误。
4、strcmp()
函数strcmp的功能是比较两个字符串的大小。
使用格式:strcmp(参1,参2);
参1、参2: 字符串(常量、数组变量名、指针)
返回值:参1、参2相同返回值为 0;参1>参2 返回值大于0;参1<参2 返回值小于0。
用法举例:
char* s1="abcd";
char* s2="bcde";
int ret=strcmp(s1,s2); //ret=-1
说明:
a. 参数只能是字符串可以包括指针、数组、常量等形式,但不能将字符型(char)做参数。
b. 英文字符按照ASCII码值比较,中文按汉语拼音比较。
5、sprintf()
函数sprintf功能是将数据写入字符串,使用方法与printf相似,不同之处在于printf是输出到屏幕,而sprintf是输出到一个字符串中。
使用格式:sprintf (参1,参2,参3);
参1 字符串指针(字符数组名)
参2 由包括占位符组成的字符串格式(占位符可有多个)
参3 与占位符对应的字符串变量或常量
返回值:返回写入变量的字符数量(不含尾部的\0),如遇到错误,返回负值。
用法举例:
char s1[] = "aaaa";
char* s2 = "bbbb";
char s[1024];
sprintf(s, "%s %s", s1, s2); //s中保存的是"aaaa bbbb"
说明:
新一些的编译器可能认为sprintf函数不安全,会报错。处理办法:a.在代码最前面加#define _CRT_SECURE_NO_WARNINGS屏蔽报错;或者使用sprintf_s替代,sprintf_s的参数增加了一个,即第二参数是参1 的大小,其余参数没变。(类似的函数不少,处理办法大同小异)
sprintf函数不仅仅可以将其它字符数据写入到字符串变量中,实际上包括int、double等凡是占位符具有的类型都可以嵌入到字符串变量中去。
6、前面几个函数使用举例:
#define _CRT_SECURE_NO_WARNINGS //避免编译器对sprintf函数报错
#include<stdio.h>
int main(void)
{
//一、strlen的使用char str[20] = "C语言从头学";int count = strlen(str); //调用strlen函数计算str字节长度并将返回值赋给countprintf("str的字节长度:%d个字节\n", count);
//二、strcpy的使用char strBak[20]; //声明的目标字符串变量字节长度要大于源变量strcpy(strBak, str); //将字符串变量str的值拷贝给strBak)printf("strBak的值为:%s\n", strBak);
//三、strcat的使用char str2[] = "有必要。";strcat(str,str2);printf("str现在的值是:%s\n",str);
//四、strcmp的使用char s1[] = "dddd";char* s2 = "bbbb";int a = strcmp(s1,s2);if (a < 0)printf("s1小于s2\n");if (a == 0)printf("s1等于s2\n");if (a > 0)printf("s1>s2\n");
//五、sprintf的使用char data[1024];char* data1 = "今天是";int data2 = 2024;char data3[] = "年";int data4 = 5;char data5[3] = "月";int data6 = 20;char* data7 = "日";sprintf(data, "%s%i%s%i%s%i%s", data1,data2,data3,data4,data5,data6,data7);printf("%s\n",data);getchar();return 0;
}
运行结果:
str的字节长度:11个字节
strBak的值为:C语言从头学
str现在的值是:C语言从头学有必要。
s1>s2
今天是2024年5月20日
相关文章:
C语言从头学31——与字符串变量相关的几个函数
strlen、strcpy、strcat、strcmp、sprintf这些函数都是与字符串相关的,除了sprintf是定义在stdio.h中外,其余几个都定义在string.h中,比较新的编译器版本stdio.h中已经含有string.h的内容,所以编程时不需要再包含string.h这个头文…...
Laravel批量插入数据:提升数据库操作效率的秘诀
Laravel批量插入数据:提升数据库操作效率的秘诀 Laravel作为PHP的现代Web应用框架,提供了优雅而简洁的方法来处理数据库操作。批量插入数据是数据库操作中常见的需求,尤其是在处理大量数据时,批量插入可以显著提高性能。本文将详…...
OpenCV:解锁计算机视觉的魔法钥匙
OpenCV:解锁计算机视觉的魔法钥匙 在人工智能与图像处理的世界里,OpenCV是一个响当当的名字。作为计算机视觉领域的瑞士军刀,OpenCV以其丰富的功能库、跨平台的特性以及开源的便利性,成为了开发者手中不可或缺的工具。本文将深入…...
手写简单模拟mvc
目录结构: 两个注解类: Controller: package com.heaboy.annotation;import java.lang.annotation.*;/*** 注解没有功能只是简单标记* .RUNTIME 运行时还能看到* .CLASS 类里面还有,构建对象久没来了,这个说明…...
【FreeRTOS】同步互斥与通信 FreeRTOS提供的方法
目录 各类方法的对比队列事件组信号量互斥量任务通知 各类方法的本质 使用全局变量可以实现通信,但是使用全局变量会有一些缺陷。 那我们怎么保证通信的正确性呢??? 我们需要引入很多互斥的方法。除了互斥之外,还需要高…...
Kafka 面试题指南
Kafka 面试题指南 本文档提供了一份详细的 Kafka 面试题指南,涵盖了 Kafka 的核心概念、架构、配置、操作和实际应用场景等方面的内容。希望通过这份指南能够帮助你在 Kafka 面试中取得成功。 目录 Kafka 基础知识 什么是 Kafka?Kafka 的主要特点是什…...
2024年7月5日 (周五) 叶子游戏新闻
老板键工具来唤去: 它可以为常用程序自定义快捷键,实现一键唤起、一键隐藏的 Windows 工具,并且支持窗口动态绑定快捷键(无需设置自动实现)。 卸载工具 HiBitUninstaller: Windows上的软件卸载工具 《乐高地平线大冒险》为何不登陆…...
热门开源项目推荐:探索开源世界的精彩
热门开源项目推荐 随着开源程序的发展,越来越多的程序员开始关注并加入开源大模型的行列。开源不仅为个人学习和成长提供了绝佳的平台,也为整个技术社区带来了创新和进步。无论你是初学者还是经验丰富的开发者,参与开源项目都能让你受益匪浅…...
Codeforces Round #956 (Div. 2) and ByteRace 2024(A~D题解)
这次比赛也是比较吃亏的,做题顺序出错了,先做的第三个,错在第三个数据点之后,才做的第二个(因为当时有个地方没检查出来)所以这次比赛还是一如既往地打拉了 那么就来发一下题解吧 A. Array Divisibility …...
基于YOLOv9的脑肿瘤区域检测
数据集 脑肿瘤区域检测,我们直接采用kaggle公开数据集,Br35H 数据中已对医学图像中脑肿瘤位置进行标注 数据集我已经按照YOLO格式配置好,数据内容如下 数据集中共包含700张图像,其中训练集500张,验证集200张 模型训…...
阿里云 ECS 服务器的安全组设置
阿里云 ECS 服务器的安全组设置 缘由安全组多个安全组各司其职一些常见的IP段百度 IP 段华为云 IP 段搜狗蜘蛛 IP 段阿里云 IP 段 。。。 缘由 最近公司规模缩减,原有的托管在 IDC 机房的服务器,都被处理掉了,所有代码都迁移到了阿里云的云服…...
昇思25天学习打卡营第15天|应用实践之ShuffleNet图像分类
基本介绍 今天的应用实践的领域是计算机视觉领域,更确切的说是图像分类任务,不过,与昨日不同的是,今天所使用的模型是ShuffleNet模型。ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型,和MobileNet, SqueezeNet等一…...
怀庄之醉适合搭配什么食物?
怀庄之醉作为一种独特的佳酿,其丰富的香气和层次感使其能够与多种食物搭配,提升餐饮体验。以下将具体探讨怀庄之醉适合搭配的食物类型,并分析为何这些搭配能够带来卓越的味觉享受。 一、肉类佳肴 怀庄之醉因其浓郁的口感,特别适…...
Java | Leetcode Java题解之第223题矩形面积
题目: 题解: class Solution {public int computeArea(int ax1, int ay1, int ax2, int ay2, int bx1, int by1, int bx2, int by2) {int area1 (ax2 - ax1) * (ay2 - ay1), area2 (bx2 - bx1) * (by2 - by1);int overlapWidth Math.min(ax2, bx2) -…...
基于单片机的空调控制器的设计
摘 要 : 以单片机为核心的空调控制器因其体积小 、 成本低 、 功能强 、 简便易行而得到广泛应用 。 本设计通过 AT89S52 控制DS18&a…...
企业如何利用短视频平台做口碑塑造和品牌营销?
随着短视频平台的不断发展,新型的双微一抖小红书等新媒体平台,正在成为网民聚集的核心平台,小马识途营销顾问认为越来越多的企业应该利用这些平台进行品牌营销和宣传。其中,抖音和小红书作为短视频平台的代表,吸引了大…...
SQL INSERT批量插入方式
1、常规INSERT写法 INSERT INTO ... VALUES (...);INSERT INTO 表名( 字段1, 字段2) VALUES (字段1的值, 字段2的值);2、SELECT语句返回值INSERT INSERT INTO ...VALUES (..., (select ...));INSERT INTO 表名1(字段1, 字段2) VALUES (字段1的值, (select 查询字段 from 表名2 …...
2.5 C#视觉程序开发实例1----IO_Manager实现切换程序
2.5 C#视觉程序开发实例1----IO_Manager实现切换程序 1 IO_Manager中输入实现 1.0 IO_Manager中输入部分引脚定义 // 设定index 目的是为了今后可以配置这些参数、 // 输入引脚定义 private int index_trig0 0; // trig index private int index_cst 7; //cst index priva…...
【入门篇】STM32寻址范围(更新中)
写在前面 STM32的寻址范围涉及存储器映射和32位地址线的使用。并且STM32的内存地址访问是按字节编址的,即每个存储单元是1字节(8位)。 一、寻址大小与范围 地址线根数 地址编号(二进制) 地址编号数(即内存大小) <...
DDD架构
1.DDD架构的概念: 领域驱动设计(Domain-Driven Design, DDD)是一种软件设计方法,旨在将软件系统的设计和开发焦点集中在领域模型上,以解决复杂业务问题 2.DDD架构解决了什么问题: 在以前的mvc架构种,三层结…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...
大数据治理的常见方式
大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法,以下是几种常见的治理方式: 1. 数据质量管理 核心方法: 数据校验:建立数据校验规则(格式、范围、一致性等)数据清洗&…...
门静脉高压——表现
一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构:由肠系膜上静脉和脾静脉汇合构成,是肝脏血液供应的主要来源。淤血后果:门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血,引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...
Django RBAC项目后端实战 - 03 DRF权限控制实现
项目背景 在上一篇文章中,我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统,为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...
【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录
#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...
用js实现常见排序算法
以下是几种常见排序算法的 JS实现,包括选择排序、冒泡排序、插入排序、快速排序和归并排序,以及每种算法的特点和复杂度分析 1. 选择排序(Selection Sort) 核心思想:每次从未排序部分选择最小元素,与未排…...
