当前位置: 首页 > news >正文

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这些函数都是与字符串相关的&#xff0c;除了sprintf是定义在stdio.h中外&#xff0c;其余几个都定义在string.h中&#xff0c;比较新的编译器版本stdio.h中已经含有string.h的内容&#xff0c;所以编程时不需要再包含string.h这个头文…...

Laravel批量插入数据:提升数据库操作效率的秘诀

Laravel批量插入数据&#xff1a;提升数据库操作效率的秘诀 Laravel作为PHP的现代Web应用框架&#xff0c;提供了优雅而简洁的方法来处理数据库操作。批量插入数据是数据库操作中常见的需求&#xff0c;尤其是在处理大量数据时&#xff0c;批量插入可以显著提高性能。本文将详…...

OpenCV:解锁计算机视觉的魔法钥匙

OpenCV&#xff1a;解锁计算机视觉的魔法钥匙 在人工智能与图像处理的世界里&#xff0c;OpenCV是一个响当当的名字。作为计算机视觉领域的瑞士军刀&#xff0c;OpenCV以其丰富的功能库、跨平台的特性以及开源的便利性&#xff0c;成为了开发者手中不可或缺的工具。本文将深入…...

手写简单模拟mvc

目录结构&#xff1a; 两个注解类&#xff1a; Controller&#xff1a; package com.heaboy.annotation;import java.lang.annotation.*;/*** 注解没有功能只是简单标记* .RUNTIME 运行时还能看到* .CLASS 类里面还有&#xff0c;构建对象久没来了&#xff0c;这个说明…...

【FreeRTOS】同步互斥与通信 FreeRTOS提供的方法

目录 各类方法的对比队列事件组信号量互斥量任务通知 各类方法的本质 使用全局变量可以实现通信&#xff0c;但是使用全局变量会有一些缺陷。 那我们怎么保证通信的正确性呢&#xff1f;&#xff1f;&#xff1f; 我们需要引入很多互斥的方法。除了互斥之外&#xff0c;还需要高…...

Kafka 面试题指南

Kafka 面试题指南 本文档提供了一份详细的 Kafka 面试题指南&#xff0c;涵盖了 Kafka 的核心概念、架构、配置、操作和实际应用场景等方面的内容。希望通过这份指南能够帮助你在 Kafka 面试中取得成功。 目录 Kafka 基础知识 什么是 Kafka&#xff1f;Kafka 的主要特点是什…...

2024年7月5日 (周五) 叶子游戏新闻

老板键工具来唤去: 它可以为常用程序自定义快捷键&#xff0c;实现一键唤起、一键隐藏的 Windows 工具&#xff0c;并且支持窗口动态绑定快捷键&#xff08;无需设置自动实现&#xff09;。 卸载工具 HiBitUninstaller: Windows上的软件卸载工具 《乐高地平线大冒险》为何不登陆…...

热门开源项目推荐:探索开源世界的精彩

热门开源项目推荐 随着开源程序的发展&#xff0c;越来越多的程序员开始关注并加入开源大模型的行列。开源不仅为个人学习和成长提供了绝佳的平台&#xff0c;也为整个技术社区带来了创新和进步。无论你是初学者还是经验丰富的开发者&#xff0c;参与开源项目都能让你受益匪浅…...

Codeforces Round #956 (Div. 2) and ByteRace 2024(A~D题解)

这次比赛也是比较吃亏的&#xff0c;做题顺序出错了&#xff0c;先做的第三个&#xff0c;错在第三个数据点之后&#xff0c;才做的第二个&#xff08;因为当时有个地方没检查出来&#xff09;所以这次比赛还是一如既往地打拉了 那么就来发一下题解吧 A. Array Divisibility …...

基于YOLOv9的脑肿瘤区域检测

数据集 脑肿瘤区域检测&#xff0c;我们直接采用kaggle公开数据集&#xff0c;Br35H 数据中已对医学图像中脑肿瘤位置进行标注 数据集我已经按照YOLO格式配置好&#xff0c;数据内容如下 数据集中共包含700张图像&#xff0c;其中训练集500张&#xff0c;验证集200张 模型训…...

阿里云 ECS 服务器的安全组设置

阿里云 ECS 服务器的安全组设置 缘由安全组多个安全组各司其职一些常见的IP段百度 IP 段华为云 IP 段搜狗蜘蛛 IP 段阿里云 IP 段 。。。 缘由 最近公司规模缩减&#xff0c;原有的托管在 IDC 机房的服务器&#xff0c;都被处理掉了&#xff0c;所有代码都迁移到了阿里云的云服…...

昇思25天学习打卡营第15天|应用实践之ShuffleNet图像分类

基本介绍 今天的应用实践的领域是计算机视觉领域&#xff0c;更确切的说是图像分类任务&#xff0c;不过&#xff0c;与昨日不同的是&#xff0c;今天所使用的模型是ShuffleNet模型。ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型&#xff0c;和MobileNet, SqueezeNet等一…...

怀庄之醉适合搭配什么食物?

怀庄之醉作为一种独特的佳酿&#xff0c;其丰富的香气和层次感使其能够与多种食物搭配&#xff0c;提升餐饮体验。以下将具体探讨怀庄之醉适合搭配的食物类型&#xff0c;并分析为何这些搭配能够带来卓越的味觉享受。 一、肉类佳肴 怀庄之醉因其浓郁的口感&#xff0c;特别适…...

Java | Leetcode Java题解之第223题矩形面积

题目&#xff1a; 题解&#xff1a; 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) -…...

基于单片机的空调控制器的设计

摘 要 &#xff1a; 以单片机为核心的空调控制器因其体积小 、 成本低 、 功能强 、 简便易行而得到广泛应用 。 本设计通过 &#xff21;&#xff34;&#xff18;&#xff19;&#xff33;&#xff15;&#xff12; 控制&#xff24;&#xff33;&#xff11;&#xff18;&a…...

企业如何利用短视频平台做口碑塑造和品牌营销?

随着短视频平台的不断发展&#xff0c;新型的双微一抖小红书等新媒体平台&#xff0c;正在成为网民聚集的核心平台&#xff0c;小马识途营销顾问认为越来越多的企业应该利用这些平台进行品牌营销和宣传。其中&#xff0c;抖音和小红书作为短视频平台的代表&#xff0c;吸引了大…...

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架构的概念&#xff1a; 领域驱动设计&#xff08;Domain-Driven Design, DDD&#xff09;是一种软件设计方法&#xff0c;旨在将软件系统的设计和开发焦点集中在领域模型上&#xff0c;以解决复杂业务问题 2.DDD架构解决了什么问题: 在以前的mvc架构种&#xff0c;三层结…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...