我有两个字符指针:
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*));
除非你省略了中间的一些初始化,否则你会得到未定义的行为。 malloc
ed 内存的内容未指定,因此当 *buf
在 memcpy
中被解释为 void*
,这几乎肯定不会产生有效指针,并且它是空指针的概率不可忽略。
如果你只是想让 buf
包含两个指针,在 malloc
之后
buf[0] = a;
buf[1] = b;
是最简单、最干净的解决方案,但是
memcpy(buf, &a, sizeof a);
memcpy(buf + 1, &b sizeof b);
也是有效的(同样使用 &buf[1]
而不是 buf + 1
。
如果您想连接a
和b
指向的字符串,您采用了完全错误的方法。您需要一个 char*
指向足够大的区域来保存结果(包括 0 终止符),最简单的方法是使用 strcat
。
关于用 memcpy 复制两个 char* 到 **buff - C 语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12872881/