C语言从头学31——与字符串变量相关的几个函数

ops/2024/10/18 14:20:08/

        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日


http://www.ppmy.cn/ops/56641.html

相关文章

Java项目中,常用的SQL语句

常用的命令&#xff1a; 1.数据的增删改查 1.插入数据(进行注册&#xff09; 语法 1&#xff1a; --第一种&#xff1a; INSERT INTO 表名(列名 1,列名 2, …) ; insert into tablename(member1,member3) valuse(,); --第二种&#xff1a; INSERT INTO 表名 VALUES(值 1,值 …

MacOS和Windows中怎么安装Redis

希望文章能给到你启发和灵感&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏 支持一下博主吧&#xff5e; 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、MacOS中Redis的安装2.1 HomeBrew 安装&#xff08;推荐&#xff09;2.2 通过官方…

解决了一个java Bug:Exception in thread “main“ java.lang.NullPointerException

写代码&#xff0c;遇到了个问题。 很纳闷&#xff0c;跟着人家写的代码。只能去查资料。 赶紧去找&#xff0c;自己的代码 逆天&#xff0c;赶紧改&#xff01; 成功了&#xff01;&#xff01;&#xff01;

视频汇聚平台EasyCVR设备录像回看请求播放时间和实际时间对不上,是何原因?

安防监控EasyCVR视频汇聚平台可提供多协议&#xff08;RTSP/RTMP/国标GB28181/GAT1400/海康Ehome/大华/海康/宇视等SDK&#xff09;的设备接入、音视频采集、视频转码、处理、分发等服务&#xff0c;系统具备实时监控、云端录像、回看、告警、平台级联以及多视频流格式分发等视…

爬虫-浏览器自动化

什么是selenium selenium是浏览器自动化测试框架&#xff0c;原本用于网页测试。但到了爬虫领域&#xff0c;它又成为了爬虫的好帮手。有了 selenium&#xff0c;我们便不再需要判断网页数据加载的方式&#xff0c;只要让 selenium 自动控制浏览器&#xff0c;就像有双无形的手…

深入解析补天平台:白帽黑客的奖金激励机制

摘要 补天平台&#xff0c;作为中国领先的网络安全众测平台&#xff0c;通过其独特的奖金激励机制&#xff0c;成功吸引了众多白帽黑客投身于网络安全的建设之中。本文将深入探讨补天平台的运作模式、奖金分配规则&#xff0c;并分析如何利用该平台提升个人网络安全技能。 1.…

Redis存储原理与数据模型

Redis存储结构 存储转换 redis-value编码 string int&#xff1a;字符串长度小于等于20切能转成整数raw&#xff1a;字符串长度大于44embstr&#xff1a;字符串长度小于等于44 list quicklist&#xff08;双向链表&#xff09;ziplist&#xff08;压缩链表&#xff09; hash …

释放计算潜力:SKlearn模型并行训练指南

释放计算潜力&#xff1a;SKlearn模型并行训练指南 在机器学习任务中&#xff0c;训练模型往往需要大量的计算资源和时间&#xff0c;特别是当处理大规模数据集时。Scikit-learn&#xff08;简称sklearn&#xff09;&#xff0c;作为Python中一个广泛使用的机器学习库&#xf…