分配最后一个元素被删除的数组的堆栈地址?

问题描述 投票:0回答:1

在 C 语言中,我想将

array A
复制到
array B
,并附加约束,即在
B
中,应删除
A
的最后一个元素。

我可以动态地将

B
的指针设置为
A
,但不知何故使数组只扩展到内存地址
&A - sizeof(A[0])
?怎么样?

谢谢!

arrays c pointers memory stack
1个回答
0
投票

您可以使用 memcpy() 在数组之间复制数据:

size_t B_len = sizeof *A - sizeof *A;
memcpy(B, A, B_len);

这使 B 保持在您开始时必须使用的任何大小。

如果

A
是指向(动态分配的)数组的指针,那么您需要数组的大小或长度才能确定要复制多少字节。您需要
malloc()
realloc()
来为
B
动态分配大小合适的数组。例如:

#include <stdlib.h>

int main() {
   int A[] = {0, 1, 2};
   size_t B_len = sizeof *A - sizeof *A;
   int *B = malloc(B_len);
   // TODO: handle error of B == NULL here
   memcpy(B, A, B_len);
   free(B);
}
© www.soinside.com 2019 - 2024. All rights reserved.