📜  memcpy c++ 用法 - C++ (1)

📅  最后修改于: 2023-12-03 15:32:52.756000             🧑  作者: Mango

memcpy c++ 用法

概述

memcpy 是 C++ 标准库中的一个函数,用于将一段内存的数据复制到另一段内存中。该函数用途广泛,可以被用来进行数据的拷贝、缓冲区的更新和内存的分配等操作。

C++ 语言中,memcpy 用于将一个长度为 count 的源地址 src 赋值给一个目标地址 dest

void* memcpy( void* dest, const void* src, std::size_t count );
用法
基本使用

最基本的 memcpy 使用方法如下所示:

#include <iostream>
#include <cstring>

int main()
{
    char str1[] = "Hello World!";
    char str2[50];
    std::memcpy(str2, str1, sizeof(str1));
    std::cout << "str2 : " << str2 << std::endl;
    return 0;
}

在上面的例子中,str1 中存储了字符串 "Hello World!",str2 是一个空白字符数组。我们使用 memcpy 函数将 str1 复制到了 str2 中,并使用 std::cout 输出了 str2

指定长度

memcpy 的第三个参数指定了要复制的字节数。例如,如果要复制一个长度为 10 字节的字符串,则可以这样写:

#include <iostream>
#include <cstring>

int main()
{
    const char* src = "HelloWorld";
    char dest[11];
    memcpy(dest, src, 10);
    dest[10] = '\0'; // Be sure to terminate the string!
    std::cout << dest << std::endl;
    return 0;
}

在这个例子中,我们声明了一个 const char* 类型的指针 src,并将其赋值为 "HelloWorld" 字符串的地址;此外,我们声明了一个 char 类型的数组 dest,其长度为 11,以便我们存储字符串以及一个字符串结束的空字符。

字符串拼接

由于 memcpy 可以将任何内容复制到任何位置,因此可以使用 memcpy 将文件的内容合并到缓冲区中,或者将字符串拼接到缓冲区中。以下代码演示了将两个字符串拼接到一起并输出结果:

#include <iostream>
#include <cstring>

int main()
{
    char str1[] = "Hello ";
    char str2[] = "World!";
    char str3[50];
    std::memcpy(str3, str1, sizeof(str1));
    std::memcpy(str3 + sizeof(str1) - 1, str2, sizeof(str2));
    std::cout << "str3 : " << str3 << std::endl;
    return 0;
}

在这个例子中,我们使用了 memcpy 函数将字符串 "Hello " 复制到 str3 缓冲区中,并使用指针算术运算符将指针移到缓冲区的结尾。然后,我们使用 memcpy 函数将字符串 "World!" 复制到 str3 缓冲区的结尾处,然后输出结果。

注意事项

使用 memcpy 函数时,需要注意以下事项:

  • memcpy 可能会引起内存泄漏和崩溃。如果目标和源重叠,memcpy 可能会引起不可预知的后果。
  • memcpy 只能复制二进制数据。如果要复制一个字符串,可以使用 strcpy() 或者 strncpy() 函数。
  • 如果要复制的数据没有以空字符结尾,则需要手动添加空字符结束符。
总结

memcpy 是 C++ 标准库中的一个函数,用于将一段内存的数据复制到另一段内存中。它非常有用,可以用来拷贝数据、更新缓冲区和分配内存。在使用 memcpy 函数时,请注意目标和源是否重叠,以及要复制的数据是否以空字符结尾。