C/C++ 基础函数

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

cpp 复制代码
void *memcpy(void *destin, void *source, unsigned n);

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

函数有三个参数,第一个是目标地址,第二个是源地址,第三个是数据长度。

cpp 复制代码
#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'

cpp 复制代码
#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

cpp 复制代码
char* strcpy(char* destination, const char* source);

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

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

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

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

cpp 复制代码
#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:**用于将一个字符串的指定数量的字符复制到另一个字符串中

cpp 复制代码
char* strncpy(char* destination, const char* source, size_t num);

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

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

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

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

cpp 复制代码
#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),或者当遇到错误时返回负数。

相关推荐
宇卿.4 分钟前
Java键盘输入语句
java·开发语言
Amo Xiang13 分钟前
2024 Python3.10 系统入门+进阶(十五):文件及目录操作
开发语言·python
friklogff26 分钟前
【C#生态园】提升C#开发效率:深入了解自然语言处理库与工具
开发语言·c#·区块链
Charles Ray2 小时前
C++学习笔记 —— 内存分配 new
c++·笔记·学习
重生之我在20年代敲代码2 小时前
strncpy函数的使用和模拟实现
c语言·开发语言·c++·经验分享·笔记
爱上语文2 小时前
Springboot的三层架构
java·开发语言·spring boot·后端·spring
编程零零七4 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
2401_858286115 小时前
52.【C语言】 字符函数和字符串函数(strcat函数)
c语言·开发语言
铁松溜达py5 小时前
编译器/工具链环境:GCC vs LLVM/Clang,MSVCRT vs UCRT
开发语言·网络
everyStudy5 小时前
JavaScript如何判断输入的是空格
开发语言·javascript·ecmascript