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字节长度并将返回值赋给count
    printf("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.mfbz.cn/a/784634.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解码Python字符串:‘r‘、‘b‘、‘u‘和‘f‘前缀的全面指南

&#x1f4d6; 正文 1 字符串前加’r’ 表示原始字符串&#xff0c;消除转义 print(abc\nde) # abc # deprint(rabc\nde) # abc\nde在下面这个列子中&#xff0c;如果不在路径字符串前面加r那么&#xff0c;路径中的空格就会出现问题 print(rD:\01 programming\09python\py…

【ARM系列】GIC600AE功能安全

GIC600AE功能安全 1.GIC600AE主要安全机制分布图&#xff1a;2.Fault Management Unit1.GIC block的错误如何上报到FMU&#xff1f;2.汇总到FMU的错误如何上报&#xff1f;3.Error Record format4.Safety Mechanism GIC600AE在原GIC600版本基础上增加了FuSa功能&#xff0c;所增…

RIP环境下的MGRE网络

首先将LSP的IP地址进行配置 其他端口也进行同样的配置 将serial3/0/1配置25.0.0.2 24 将serial4/0/0配置35.0.0.2 24 将GE0/0/0配置45.0.0.2 24 进行第二步 R1与R5之间使用ppp的pap认证 在R5中进行配置 在aaa空间中创建账号和密码 将这个账号和密码使用在ppp协议中 然后…

zdppy+onlyoffice+vue3解决文档加载和文档强制保存时弹出警告的问题

解决过程 第一次排查 最开始排查的是官方文档说的 https://api.onlyoffice.com/editors/troubleshooting#key 解决方案。参考的是官方的 https://github.com/ONLYOFFICE/document-server-integration/releases/latest/download/Python.Example.zip 基于Django的Python代码。 …

使用 Hugging Face 模型时遇到的问题

题意&#xff1a; I load a float32 Hugging Face model, cast it to float16, and save it. How can I load it as float16? 我加载了一个float32的Hugging Face模型&#xff0c;将其转换为float16&#xff0c;并保存了。我该如何以float16的形式加载它呢&#xff1f; 问题…

2.硬盘和内存区别

2.2 磁盘比内存慢几万倍&#xff1f; 存储器方面的设备&#xff0c;分类比较多&#xff0c;那我们肯定不能只买一种存储器&#xff0c;比如你除了要买内存&#xff0c;还要买硬盘&#xff0c;而针对硬盘我们还可以选择是固态硬盘还是机械硬盘。 相信大家都知道内存和硬盘都属…

【大模型LLM面试合集】大语言模型架构_attention

1.attention 1.Attention 1.1 讲讲对Attention的理解&#xff1f; Attention机制是一种在处理时序相关问题的时候常用的技术&#xff0c;主要用于处理序列数据。 核心思想是在处理序列数据时&#xff0c;网络应该更关注输入中的重要部分&#xff0c;而忽略不重要的部分&…

java webservice 根据wsdl文件生成客户端代码;webservice可视化测试工具SOAPUI;

背景 最近要对接HIS系统&#xff0c;对方提供的接口是webservice的&#xff08;有点古老&#xff09;&#xff0c;对方是webservice的提供方&#xff0c;提供了wsdl文件&#xff0c;我方需要根据wsdl文件生成java代码&#xff0c;intellij idea生成webservice客户端代码支持的…

复分析——第10章——Θ函数应用(E.M. Stein R. Shakarchi)

第10章 Θ函数的应用 (Applications of Theta Functions) The problem of the representation of an integer n as the sum of a given number k of integral squares is one of the most celebrated in the theory of numbers. Its history may be traced back to Diopha…

列表渲染 v-for

列表渲染v-for 使用v-for指令基于数组渲染一个列表&#xff0c;v-for指令的值需要使用item in/of items形式的特殊语法&#xff0c;其中items是源数据的数组&#xff0c;而item是迭代的别名。 代码实例&#xff1a; <template> <div><p v-for"item in na…

Java基础概念

1.注释和关键字 &#xff08;1&#xff09;注释 什么是注释&#xff1f;注释就是对代码进行解释说明的文字 注释的分类&#xff1f;单行注释&#xff0c;多行注释&#xff0c;文档注释 注释的使用细节&#xff1f; 注释的内容不会参与编译和运行&#xff0c;仅仅是对代码的…

使用vllm部署大语言模型

vLLM是一个快速且易于使用的库&#xff0c;用于LLM&#xff08;大型语言模型&#xff09;推理和服务。通过PagedAttention技术&#xff0c;vLLM可以有效地管理注意力键和值内存&#xff0c;降低内存占用和提高计算效率。vLLM能够将多个传入的请求进行连续批处理&#xff0c;从而…

智能视频监控如何助力体育场馆安全管理:安防监控EasyCVR视频综合管理方案

近期有新闻报道&#xff0c;6月30日&#xff0c;17岁的中国国家羽毛球运动员在亚洲青年羽毛球锦标赛中&#xff0c;突然晕倒并抽搐&#xff0c;尽管被送往医院抢救&#xff0c;该运动员仍在当晚不幸离世。运动猝死不仅发生于职业运动员身上&#xff0c;在普通健身者中也时有发生…

nodejs + vue3 模拟 fetchEventSouce进行sse流式请求

先上效果图: 前言: 在GPT爆发的时候,各项目都想给自己的产品加上AI,蹭上AI的风口,因此在最近的一个需求,就想要给项目加入Ai的功能,原本要求的效果是,查询到对应的数据后,完全展示出来,也就是常规的post请求,后来这种效果遇到了一个很现实的问题:长时间的等待。我…

4个方法帮助你解决RAR解压文件时提示密码错误问题

在日常工作和学习中&#xff0c;我们经常需要处理各种压缩文件&#xff0c;这些文件有时为了保护内容安全&#xff0c;会被设置密码。然而&#xff0c;在解压这些文件时&#xff0c;如果遇到“密码错误”的提示&#xff0c;可能会让人感到十分棘手。今天&#xff0c;我们就来探…

[ICS] Modbus未授权攻击S7协议漏洞利用

工业控制系统历史 在可编程逻辑控制器(plc)成为标准之前&#xff0c;工厂车间自动化是通过机架和机架的工业继电器&#xff0c;气动柱塞计时器和电磁计数器来控制电机的启动和停止&#xff0c;阀门的打开以及其他与控制相关的过程交互。运行这种设置的控制程序根本不是程序&am…

如何使用 pytorch 创建一个神经网络

我已发布在&#xff1a;如何使用 pytorch 创建一个神经网络 SapientialM.Github.io 构建神经网络 1 导入所需包 import os import torch from torch import nn from torch.utils.data import DataLoader from torchvision import datasets, transforms2 检查GPU是否可用 dev…

Vue3基础知识:组合式API中的provide和inject,他们作用是什么?如何使用?以及案例演示

1.provide和inject相较于父子传递的不同在于provide,inject可以用于跨层级通信&#xff08;通俗易懂的讲就是可以实现爷孙之间的直接信息传递&#xff09;。 1.跨层级传递数据 1.在顶层组件通过provide函数提供数据 2.底层组件通过inject函数获取数据 演示一&#xff1a;跨…

Linux安装Jmeter及简单使用教程

Linux安装Jmeter 首先需要java环境 java --version官网 下载二进制包 #创建文件夹 sudo mkdir /usr/local/jmeter #解压 sudo tar zxvf apache-jmeter-5.6.3.tgz -C /usr/local/jmeter编辑配置文件 sudo vim /etc/profile&#xff0c;添加以下内容 export JMETER_HOME/usr/l…

【Linux系列2】Cmake安装记录

方法一 1. 查看当前cmake版本 [rootlocalhost ~]# cmake -version cmake version 2.8.12.22. 进行卸载 [rootlocalhost ~]# yum remove -y cmake3. 进行安装包的下载&#xff0c;也可以下载好安装包后传至相应的目录 [rootlocalhost ~]# mkdir /opt/cmake [rootlocalhost ~…