我有两个char指针:
char *a="A";
char *b="B";
指向指针缓冲区的指针:
char **buf = malloc(sizeof(char*)*2);
我想用memcpy将两个变量复制到buf:
memcpy(*buf, &a, sizeof(char*));
memcpy(*buf, &b, sizeof(char*));
但它取代了第一个变量..
我怎么能复制两个?
答案 0 :(得分:1)
你真正想做的是什么?
使用
char **buf = malloc(sizeof(char*)*2);
memcpy(*buf, &a, sizeof(char*));
memcpy(*buf, &b, sizeof(char*));
除非你之间省略了一些初始化,否则你会得到未定义的行为。 malloc
ed内存的内容未指定,因此当*buf
被解释为void*
中的memcpy
时,几乎肯定不会产生有效指针,并且它是一个空指针的概率是不可忽略的。
如果您只想让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
。
答案 1 :(得分:0)
我用我自己的测试代码尝试了你的程序:我希望这会有所帮助:
#define MAX_LENGTH 10
#define ARRAY_LENGTH 2
int main(int argc, char *argv[])
{
char *a = "A";
char *b = "B";
char **buf = (char **)malloc(sizeof(char*)*ARRAY_LENGTH);
*buf = (char *)malloc(sizeof(char) * MAX_LENGTH);
*(buf+1) = (char *)malloc(sizeof(char) * MAX_LENGTH);
memset(buf[0],0,10);
memset(buf[1],0,10);
memcpy(buf[0],a,strlen(a));
memcpy(buf[1],b,strlen(b));
printf("%s %s",buf[0],buf[1]);
free(buf[0]);
free(buf[1]);
free(buf)
return 0;
}