从2d动态字符数组复制到c

时间:2017-12-04 08:22:33

标签: c pointers multidimensional-array dynamic-arrays memcpy

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

  1. 这段代码有什么问题?和
  2. 有没有办法在不使用迭代的情况下完成?

    for (int i = 0; i < count; i++) {
        memcpy(&buf_copy[i], buf[i], sizeof(buf[i]));
    }
    
  3. bufbuf_copy都是2d动态字符数组。

    编辑:数组的声明

    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);
    }
    

1 个答案:

答案 0 :(得分:1)

  

此代码有什么问题?

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

改变这个:

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]已经是指针。

  

有没有办法在不使用迭代的情况下完成?

如果没有ireation就无法完成,因为malloc() 阅读C / C++ How to copy a multidimensional char array without nested loops?

中的更多内容

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