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架构种,三层结…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...

云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...