memcpy的使用以及其引出的‘\0’显示问题

先把代码写上:

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

int main()
{
    char buffer[20] ;
    char name[16]="This" ;
    for(int i = 4 ; i < sizeof(name) ; i++)
    {
        name[i] = '\0' ;
    }
    cout <<name ;
    int x = 589089 ;
    memcpy(buffer,name,sizeof(name)) ;
    memcpy(buffer+16,&x,sizeof(int)) ;
    for(int i = 0 ; i < sizeof(name) ; i++)
    {
        cout << name[i] ;
    }
    cout << endl ;
    for(int i = 0 ; i < sizeof(buffer) ; i++)
    {
        cout << buffer[i] ;
    }
    cout << endl ;
    int t ;
    memcpy(&t,buffer+sizeof(name),sizeof(int)) ;
    cout << t ;
    return 0;
}


&nbs

### memcpy 函数的正确使用方法及示例 `memcpy` 是 C 和 C++ 中的一个标准库函数,用于将一块内存的内容复制到另一块内存中。它在 `<cstring>` 或 `<string.h>` 头文件中定义。以下是关于 `memcpy` 的详细说明和示例代码。 #### 函数原型 `void* memcpy(void* dest, const void* src, size_t n);` - `dest`:目标内存地址。 - `src`:源内存地址。 - `n`:要复制的字节数。 该函数返回指向目标内存地址的指针[^1]。 #### 使用注意事项 1. **源和目标不能重叠**:如果源和目标内存区域有重叠部分,行为将是未定义的。在这种情况下,建议使用 `memmove`[^3]。 2. **确保内存足够**:在调用 `memcpy` 之前,必须确保目标内存有足够的空间来容纳被复制的数据。 3. **类型无关**:`memcpy` 不关心数据的类型,只按字节进行复制。因此可以用来复制任意类型的数据[^4]。 #### 示例代码 以下是一个简单的 `memcpy` 使用示例: ```c #include <stdio.h> #include <string.h> int main() { char source[] = "Hello, World!"; char destination[50]; // 使用 memcpy 将 source 的内容复制到 destination memcpy(destination, source, strlen(source) + 1); printf("Source: %s\n", source); printf("Destination: %s\n", destination); return 0; } ``` 上述代码中,`strlen(source) + 1` 确保了字符串的终止符 `\0` 也被复制[^1]。 #### 自定义实现 下面是一个简易版本的 `memcpy` 实现,展示了其内部工作原理: ```c void *my_memcpy(void *dest, const void *src, size_t n) { unsigned char *p_dest = (unsigned char *)dest; unsigned char *p_src = (unsigned char *)src; for (size_t i = 0; i < n; i++) { *p_dest++ = *p_src++; } return dest; } ``` 此实现逐字节地从源地址复制到目标地址[^2]。 #### 整型数据复制示例 `memcpy` 还可以用来复制非字符类型的数据,例如整型数组: ```c #include <stdio.h> #include <string.h> int main() { int source[5] = {1, 2, 3, 4, 5}; int destination[5]; memcpy(destination, source, sizeof(source)); for (int i = 0; i < 5; i++) { printf("destination[%d] = %d\n", i, destination[i]); } return 0; } ``` 在这个例子中,`sizeof(source)` 确保了整个数组都被复制[^3]。 ### 总结 `memcpy` 是一个高效且灵活的函数,适用于各种类型的内存复制操作。但在使用需注意源和目标内存不能重叠,否则可能导致未定义行为。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值