C/C++ 基础函数

news2025/2/4 6:45:37

memcpy:C/C++语言中的一个用于内存复制的函数,声明在 string.h 中(C++是 cstring)

void *memcpy(void *destin, void *source, unsigned n);

作用是:以source指向的地址为起点,将连续的n个字节数据,复制到以destin指向的地址为起点的内存中。它可以用于复制任意类型的数据,包括基本类型(如整数、浮点数)和自定义结构体等
函数有三个参数,第一个是目标地址,第二个是源地址,第三个是数据长度。

#include <stdio.h>
#include <string.h>

int main() {
    int source[] = {1, 2, 3, 4, 5};
    int destination[10] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
    
    memcpy(destination, source, sizeof(source));
    
    for (int i = 0; i < 10; i++) {
        printf("%d ", destination[i]);
    }
    
    return 0;
}

//输出结果为  1 2 3 4 5 60 70 80 90 100

使用memcpy函数时,需要注意:数据长度(第三个参数)的单位是字节memcpy 函数不会自动添加字符串的结尾符号 ‘\0’,因此需要手动加上 ‘\0’

#include <stdio.h>
#include <string.h>

int main() {
    char source[] = "Hello, World!";
    char destination[20];
    
    memcpy(destination, source, strlen(source) + 1);
    
    printf("Source: %s\n", source);
    printf("Destination: %s\n", destination);

    return 0;
}

strlen( (source) +1 )的目的是把sourc中的结束标志'\0'也拷贝过去


strcpy

char* strcpy(char* destination, const char* source);

函数通过逐个字符复制的方式,将 源字符串中的内容 拷贝到 目标字符串中,直到遇到源字符串的结尾字符(\0)或者达到目标字符串的大小限制。且结束后在目标字符数组自动加'\0'

strcpy 函数不仅可以用于复制字符串,还可以复制任何类型的内存块,包括字符数组、结构体等

两个参数:目标字符串 destination 和源字符串 source

需要注意的是,在使用 strcpy 函数时,务必确保目标字符串的缓冲区足够大,以防止缓冲区溢出的错误。此外,源字符串需要以空字符 \0 结尾,以使复制后的字符串正确结束

#include <stdio.h>
#include <string.h>

int main() {
    char source[] = "Hello, World!";
    char destination[20];
    
    strcpy(destination, source);
    
    printf("Source: %s\n", source);
    printf("Destination: %s\n", destination);

    return 0;
}
//输出结果为
//Source: Hello, World!
//Destination: Hello, World!

strncpy: 用于将一个字符串的指定数量的字符复制到另一个字符串中

char* strncpy(char* destination, const char* source, size_t num);

strncpy 函数会从源字符串 中复制指定数量的字符(最多 num 个)到目标字符串中。

        如果源字符串的字符数量小于 num,则会使用空字符 \0 来填充目标字符串的剩余空间,以确保目标字符串具有 num 个字符。

        如果源字符串的字符数量大于等于 num,则目标字符串将只包含源字符串中的 num 个字符,不会自动添加空字符 \0,需要手动添加

        目标字符串 的缓冲区必须足够大,以容纳复制的字符。如果目标字符串的长度小于 num,则需要手动在复制后的字符串中添加空字符 \0。

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;

int main() {
    char source[] = "Hello, this is a test string";
    char destination[20];
    memset(destination, 0, sizeof(destination));

    strncpy(destination, source + 7, 4); // 从源字符串的第8个字符开始复制4个字符到目标字符串中
    destination[4] = '\0'; // 手动添加字符串结尾标志

    printf("%s\n", destination);
    return 0;
}
// 输出结果为:  this

sprintf() 是一个库函数,用于将格式化的数据写入字符数组中

原型:int sprintf(char *str, const char *format, ...);

其中,参数 str 表示要存储格式化结果的字符串缓冲区,参数 format 表示格式化字符串的格式,类似于 printf() 函数中的格式化字符串,可以包含格式化标记和转换说明符,以及其他字符。在格式化字符串中,可以用类似于 %d%f%s 等占位符来表示后面可变参数中不同类型的值,并将它们格式化为字符串。

sprintf() 函数的作用就是将格式化后的结果写入到字符数组 str 中,并返回写入的字符数(不包括终止符 \0)。如果发生错误,则返回负值。

        执行完这段代码后,字符串缓冲区 acGpsTime 中存储了经过格式化后的字符串,格式为 “%4d-%02d-%02d %02d:%02d:%02d”,其中 %4d 表示年份,%02d 表示月、日、时、分、秒,经过格式化后的结果如 “2021-11-11 11:11:11” 这样的字符串。需要注意的是,sprintf() 函数存在缓冲区溢出和安全性问题,因此使用时要格外小心,避免发生安全隐患


     snprintf 是一个 C 语言标准库函数,用于格式化字符串并将结果写入到指定的字符数组中原型:int snprintf(char *str, size_t size, const char *format, ...);

    snprintf 的第一个参数 str 是指向字符数组的指针,用于存储格式化后的字符串。第二个参数 size 是字符数组的大小,用于限制输出的字符数,以防止缓冲区溢出。

    format 参数是格式化字符串,它可以包含普通字符和格式化说明符。可以使用 % 符号和一些转换字符来指定输出的格式。

        除了 format 参数外,snprintf 还可以接受其他可变参数,用于填充格式化字符串中的占位符。

        函数的返回值表示成功写入字符数组的字符数(不包括终止符 \0),或者当遇到错误时返回负数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1328581.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Grafana】Grafana匿名访问以及与LDAP连接

上一篇文章利用Docker快速部署了Grafana用来展示Zabbix得监控数据&#xff0c;但还需要给用户去创建账号允许他们登录后才能看展示得数据&#xff0c;那有什么办法让非管理员更方便得去访问Grafana呢&#xff1f;下面介绍两个比较方便实现的&#xff1a; 在开始设置前&#xff…

Echarts 仪表盘实现平均值和实时值

const gaugeData [{value: 20,name: 互动发起率实时值,title: {offsetCenter: [-25%, 10%]},detail: {offsetCenter: [-25%, 18%]}},{value: 40,name: 互动发起平均值,title: {offsetCenter: [25%, 10%]},detail: {offsetCenter: [25%, 18%]}},// {// value: 60,// name: …

Megatron模型并行研究

Megatron模型并行研究 1. 技术调研 a. Megatron-LM Megatron-LM针对的是特别大的语言模型&#xff0c;使用的是模型并行的训练方式。但和普通的模型并行不同&#xff0c;他采用的其实是张量并行的形式&#xff0c;具体来说就是将一个层切开放到不同的GPU上&#xff0c;属于层…

前端---后端 跨域?

一、跨域 &#xff1f; 跨域&#xff08;Cross-Origin Resource Sharing&#xff0c;CORS&#xff09;是浏览器的一项安全功能&#xff0c;它用于限制一个域名下的文档如何从另一个不同的域名、端口或协议请求资源。跨域资源共享&#xff08;Cross-Origin Resource Sharing&am…

Protobuf 编码规则及c++使用详解

Protobuf 编码规则及c使用详解 Protobuf 介绍 Protocol Buffers (a.k.a., protobuf) are Google’s language-neutral, platform-neutral, extensible mechanism for serializing structured data Protocol Buffers&#xff08;简称为protobuf&#xff09;是谷歌的语言无关、…

邻接矩阵表示 深度遍历 广度遍历

邻接矩阵表示法是一种图的表示方法&#xff0c;其中每个顶点都有一个唯一的索引&#xff0c;而每条边则由两个顶点之间的连接确定。深度优先遍历&#xff08;DFS&#xff09;和广度优先遍历&#xff08;BFS&#xff09;是两种常用的图遍历算法。 1. 深度优先遍历&#xff08;D…

【Python】matplotlib画图_饼状图

柱状图主要使用pie()函数&#xff0c;基本格式如下&#xff1a; plt.pie(x,explodeNone,labelsNone,colorsNone,autopctsNone,pctdistance0.6,shadowFalse,labeldistance1.1,staatangleNone,radiusNone,counterclockTrue,wedgepropsNone,textpropsNone,center(0,0),frameFalse…

【大数据存储与处理】第一次作业

hbase 启动步骤 1、启动 hadoop&#xff0c;master 虚拟机&#xff0c;切换 root 用户&#xff0c;输入终端命令&#xff1a;start-all.sh 2、启动 zookeeper&#xff0c;分别在 master、slave1、slave2 虚拟机终端命令执行&#xff1a;zkServer.sh start 3、启动 hbase&#x…

MySQL 分表真的能提高查询效率?

背景 首先我们以InnoDB引擎&#xff0c;BTree 3层为例。我们需要先了解几个知识点&#xff1a;页的概念、InnoDB数据的读取方式、什么是树搜索&#xff1f;、一次查询花费的I/O次数&#xff0c;跨页查询。 页的概念 索引树的页&#xff08;page&#xff09;是指存储索引数据…

Flutter本地化(国际化)之App名称

文章目录 Android国际化IOS国际化 Flutter开发的App&#xff0c;如果名称想要跟随着系统的语言自动改变&#xff0c;则必须同时配置Android和IOS原生。 Android国际化 打开android\app\src\main\res\values 创建strings.xml 在values上右键&#xff0c;选择New>Values Res…

【lesson21】MySQL复合查询(2)子查询

文章目录 子查询测试要用到的表测试要用到的数据单行子查询案例 多行子查询案例 多列子查询案例 在from子句中使用子查询案例 合并查询union案例union all案例 子查询 子查询是指嵌入在其他sql语句中的select语句&#xff0c;也叫嵌套查询 测试要用到的表 测试要用到的数据 单…

TOPCON拓普康BM-7A亮度色度计

用途&#xff1a; 其应用范围非常之广&#xff1a;各种电视/手机/电脑/复印机等的液晶显示屏LCD的亮度、色度、色温、对比度等项目测定&#xff1b;液晶领域内各部件&#xff08;LED、CCFL、EL背光源&#xff0c;液晶模组&#xff0c;滤光片&#xff09;的亮度、色度、配光特性…

Qt通用属性工具:随心定义,随时可见(二)

一、话接上篇 本片咱们话接上篇《Qt通用属性工具&#xff1a;随心定义&#xff0c;随时可见&#xff08;一&#xff09;》&#xff0c;讲讲自定义的对象属性如何绑定通用属性编辑工具。 二、破杯二两酒 1、一颗小花生 同样&#xff0c;我们先准备一个比较简单的demo&#x…

案例系列:营销模型_客户细分_无监督聚类

案例系列&#xff1a;营销模型_客户细分_无监督聚类 import numpy as np # 线性代数库 import pandas as pd # 数据处理库&#xff0c;CSV文件的输入输出&#xff08;例如pd.read_csv&#xff09;/kaggle/input/customer-personality-analysis/marketing_campaign.csv在这个项…

老师的责任和义务

作为一名老师&#xff0c;我们的责任和义务是重大的。在教育领域&#xff0c;我们扮演着至关重要的角色&#xff0c;肩负着培养下一代人才的重任。下面&#xff0c;我将以知乎的口吻&#xff0c;从几个方面谈谈老师的责任和义务。 确保学生获得高质量的教育。这包括制定合理的教…

企业级低代码平台:助力IT部门,释放业务创新力

随着低代码技术的升级&#xff0c;越来越多的企业开始采用低代码平台&#xff0c;如恒逸集团利用低代码平台快速搭建了综合业务管理平台&#xff0c;时间比传统开发缩短近一倍。云表低代码提供的数据、流程、权限、图表等引擎工具&#xff0c;完美适配企业数字化需求。根据Gart…

HarmonyOS应用事件打点开发指导

简介 传统的日志系统里汇聚了整个设备上所有程序运行的过程流水日志&#xff0c;难以识别其中的关键信息。因此&#xff0c;应用开发者需要一种数据打点机制&#xff0c;用来评估如访问数、日活、用户操作习惯以及影响用户使用的关键因素等关键信息。 HiAppEvent 是在系统层面…

《每天一分钟学习C语言·六》

1、 1字节&#xff08;Byte&#xff09;8位&#xff0c;1KB1024字节&#xff0c;1M1024KB&#xff0c;1G1024MB 2、 char ch A; printf(“ch %d\n”, ch);ch为65 这里是ASCII码转换 3、 scanf("%d", &i); //一般scanf直接加输入控制符 scanf("m%d&qu…

飞天使-k8s知识点4-验证安装好后功能

文章目录 接k8s知识点2之验证集群功能创建dashboard验证安装nginx 并访问tomcat 访问 接k8s知识点2之验证集群功能 [rootkubeadm-master2 tmp]# kubectl run net-test1 --imagealpine sleep 36000 pod/net-test1 created [rootkubeadm-master2 tmp]# kubectl get pod NAME …

SQLiteStudio安装指南

本博文源于笔者想要打开sqlite3的db文件&#xff0c;于是下载了SQLiteStudio&#xff0c;下载了它&#xff0c;sqlite3的文件随便查看&#xff0c;这里从零开始安装 文章目录 1、搜索官网网址2、开始下载3、开始安装4、开始使用5、总结 1、搜索官网网址 官网地址&#xff1a;…