【发布时间】:2016-11-06 19:02:28
【问题描述】:
假设我有一个函数返回一个带有新空间内存的双指针字符。我应该如何将双指针字符复制到另一个双指针字符?假设我将新长度分配给双指针 char A 和旧数组 B。
char **newArray(char **B, int oldLen, int newLen){
char **A = malloc(newLen * sizeof(char*));
// if(A == NULL){
// perror("Failed to allocate");
// exit(1);
// }
memcpy(A, B, oldLen);//can copy memory from B to A?
free(B);
return A;
}
【问题讨论】:
-
oldLen * sizeof(*A)。您已经对分配进行了正确的计算。为什么不在你的memcpy上也这样做呢?或者更好的是,realloc。 -
@n.m.他不是在复制一个字符数组,而是一个指针数组。
-
@WhozCraig 你的意思是'memcpy(A, B, oldLen * sizeof(*A));'吗?我已经研究了如何使用 memcpy 很长时间了,我注意到 void *memcpy(void *dest, const void *src, size_t n);是如何使用 memcpy...我只是在想如果 A 和 B 是双指针,我什至可以使用 memcpy 将数组指针复制到另一个?
-
@WhozCraig 嗯,可能是这样。
-
@HxH
memcpycopysizebytes 从src到dst。计算字节数是您的工作,就像您在执行malloc时所做的那样。由于A是char**,那么sizeof(*A)等于A将指向的大小,以字节为单位,即char*,因此oldLen * sizeof(*A)是oldLen的字节数char*要求。如果这样更容易理解,您也可以轻松使用oldLen * sizeof(char*)。
标签: c memcpy double-pointer