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

时间:2012-10-13 11:57:55

标签: c memcpy

我有两个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*));

但它取代了第一个变量..

我怎么能复制两个?

2 个答案:

答案 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

如果要将字符串ab连接起来,则表示您遵循完全错误的方法。您需要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;
}