小甲鱼 发表于 2016-12-16 16:26:11

memcpy -- 拷贝内存空间

memcpy 函数文档

函数概要:

memcpy 函数从 src 指向的内存空间拷贝 n 个字节到 dest 指向的内存空间。src 和 dest 指向的内存区域不能出现重叠,否则应该使用 memmove 函数。

memcpy 函数并不关心被复制的数据类型,只是逐字节地进行复制,这给函数的使用带来了很大的灵活性,可以面向任何数据类型进行复制。


函数原型:

#include <string.h>
...
void *memcpy(void *dest, const void *src, size_t n);

参数解析:


参数 含义
dest指向目标内存空间
src指向源内存空间
n指定要拷贝到 dest 指向空间的前 n 个字节


返回值:

返回 dest 指向的内存空间。


演示:

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

int main(void)
{
      char str[] = "I love FishC.com!";
      char *ptr;
      int length = sizeof(str);

      printf("length = %d\n", length);

      ptr = (char *)malloc(length * sizeof(char));
      if (ptr == NULL)
      {
                exit(1);
      }

      memset(ptr, 0, length);
      memcpy(ptr, str, length);

      printf("%s\n", ptr);

      return 0;
}


JackII 发表于 2019-10-8 10:47:10

为什么有两个printf函数只打印了一句话?

wanting-for 发表于 2020-2-27 13:45:42

int main(void)
{
    char s[] = "hello world";
    int len = strlen(s);
    char* ptr = (char *)malloc((len + 1)*sizeof(char));
    if (!ptr)
    {
      exit(1);
    }
    ptr = (char*)memcpy(ptr, s, len+1);
   
    while (*ptr)
    {
      printf("%c ", *ptr++);
    }
   
   
    putchar('\n');
    return 0;
}
我觉得这里并不应该是单纯的长度来进行拷贝,应该是长度加 1 ,最后还有一个 ‘\0’ ,来标志结束,如果单纯的长度会导致最后一个'\0',会导致最后的那个0未拷贝;造成错误;
如有错误,请提醒我哦

shatanzongcai 发表于 2020-6-7 16:59:20

小甲鱼这里应该是出现了一点纰漏,因为mencpy是按照字符分配内存的,所以
memset(ptr, 0, length);
memcpy(ptr, str, length);

这两句的最后一个参数应该不是length,而是length*sizeof(int)否则会出现错误

Lowell 发表于 2020-10-16 09:52:19

本帖最后由 Lowell 于 2020-10-16 09:56 编辑

shatanzongcai 发表于 2020-6-7 16:59
小甲鱼这里应该是出现了一点纰漏,因为mencpy是按照字符分配内存的,所以

这两句的最后一个参数应该不是 ...

#include <string.h>
void *memcpy( void *to, const void *from, size_t count );


功能:函数从from中复制count 个字符到to中,并返回to指针。
因为 size_t 就是 unsigned int ,即memcpy按照字节个数进行复制!

1729756359 发表于 2020-10-16 19:55:35

wanting-for 发表于 2020-2-27 13:45
我觉得这里并不应该是单纯的长度来进行拷贝,应该是长度加 1 ,最后还有一个 ‘\0’ ,来标志结束,如果单 ...

你用的是strlen,小甲鱼用的是sizeof好不好?

日骑士的龙 发表于 2022-11-18 19:36:05

这个是不是应该学完小甲鱼指真再来学?看完字符串学这个,就算有点学校学的基础也看得一愣一愣的
页: [1]
查看完整版本: memcpy -- 拷贝内存空间