从 2d 动态字符数组复制到 c 中的另一个 2d 动态数组

Copy from 2d dynamic char array to another 2d dynamic array in c

我想将一个二维数组的内容复制到另一个二维字符数组中。我将以下 for 循环与 memcpy 一起使用,但它没有按预期工作。所以我有两个问题。

  1. 这段代码有什么问题?
  2. 有没有不用迭代的方法?

    for (int i = 0; i < count; i++) {
        memcpy(&buf_copy[i], buf[i], sizeof(buf[i]));
    }
    

bufbuf_copy都是二维动态字符数组。

编辑:数组声明

char **buf;
char **buf_copy;

编辑 2:这是为它们分配内存的方式

void intit_buf()
{
    buf = (char**)malloc(BUFFER * sizeof(*buf));
    for (int i = 0; i < BUFFER; i++)
        buf[i] = (char*)malloc(sizeof(char) * 33);

    //initialize buf_copy
    buf_copy = (char**)malloc(BUFFER * sizeof(*buf_copy));
    for (int i = 0; i < BUFFER; i++)
        buf_copy[i] = (char*)malloc(sizeof(char) * 33);
}

What is wrong with this code?

函数调用的第一个和最后一个参数。

改变这个:

memcpy(&buf_copy[i], buf[i], sizeof(buf[i]));

对此:

memcpy(buf_copy[i], buf[i], 33);

因为你需要给出列的大小,而不是指针的大小!

此外,请注意您需要传递 buf_copy,就像您对 buf 所做的一样,而不需要获取它的地址或其他内容,因为 memcpy() 需要它的两个指针第一个参数,buf_copy[i]buf[i] 已经是指针。

Is there a way to do it without use of iteration?

没有 ireation 就无法完成,因为 malloc() 可能 没有 返回连续内存。在 C / C++ How to copy a multidimensional char array without nested loops?

中阅读更多内容

PS:与您的问题无关,但总的来说:Do I cast the result of malloc?不!