用 memcpy 复制两个 char* 到 **buff - C 语言

标签 c memcpy

我有两个字符指针:

char *a="A";
char *b="B";

还有一个指向指针缓冲区的指针:

char **buf = malloc(sizeof(char*)*2);

我想使用 memcpy 将两个变量复制到 buf:

memcpy(*buf, &a, sizeof(char*));
memcpy(*buf, &b, sizeof(char*));

但它替换了第一个变量..

我怎样才能复制两个?

最佳答案

你到底想做什么?

char **buf = malloc(sizeof(char*)*2);

memcpy(*buf, &a, sizeof(char*));
memcpy(*buf, &b, sizeof(char*));

除非你省略了中间的一些初始化,否则你会得到未定义的行为。 malloced 内存的内容未指定,因此当 *bufmemcpy 中被解释为 void* ,这几乎肯定不会产生有效指针,并且它是空指针的概率不可忽略。

如果你只是想让 buf 包含两个指针,在 malloc 之后

buf[0] = a;
buf[1] = b;

是最简单、最干净的解决方案,但是

memcpy(buf, &a, sizeof a);
memcpy(buf + 1, &b sizeof b);

也是有效的(同样使用 &buf[1] 而不是 buf + 1

如果您想连接ab 指向的字符串,您采用了完全错误的方法。您需要一个 char* 指向足够大的区域来保存结果(包括 0 终止符),最简单的方法是使用 strcat

关于用 memcpy 复制两个 char* 到 **buff - C 语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12872881/

相关文章:

c - Valgrind 提示内存泄漏

c - 什么时候在C中使用堆?

c - C中的排序结构无法在VS2017中显示输出结果,但在CodeBlocks中显示

c - 有什么方法可以使用 memcpy() 将值复制到特定的字符串位置?

c++ - 将字符串转换为 char 指针可以指向的 char 数组/值的最有效方法是什么

c++ - memcpy : access violation reading location 后崩溃

c - 基本菜单驱动程序在成功完成第一个任务后重复两次

c++ - 函数内用户提供的代码

C++ memcpy 将结构体转换为字节数组

c - memcpy 和指针