我想将二维数组的内容复制到另一个二维char数组中。我在for
使用了以下memcpy
循环,但它没有按预期工作。所以我有两个问题。
有没有办法在不使用迭代的情况下完成?
for (int i = 0; i < count; i++) {
memcpy(&buf_copy[i], buf[i], sizeof(buf[i]));
}
buf
和buf_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);
}
答案 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?不!