C/C++ 基础函数

发布时间:2023年12月22日

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

文章来源:https://blog.csdn.net/C18304057755/article/details/135147629
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。