1

我有两个字符指针:

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

以及指向指针缓冲区的指针:

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

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

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

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

我怎样才能复制两个?

4

2 回答 2

1

你真正想做的是什么?

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

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

除非你在两者之间省略了一些初始化,否则你会得到未定义的行为。malloced 内存的内容是未指定的,因此 when*buf被解释为void*in 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.

于 2012-10-13T12:20:23.513 回答
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;
}
于 2012-10-13T11:59:59.323 回答