如何在C中用另一个数组覆盖一个数组

如何在C中用另一个数组覆盖一个数组,c,arrays,C,Arrays,我想知道在C语言中是否可以用另一个数组覆盖一个数组的内容,通过这样做,我如何解决数组大小丢失的问题 假设我有两个数组 int a[] = {1,2,3,4,6,7,8}; int b[] = {1,6}; // How can I overwrite the array a with array b, so get the following?: a[] = {1,6}; 你不能这样做,就像@Klutt&@david ranieri在评论中说的那样,你可以复制a中b的内容,然后用0填充。

我想知道在C语言中是否可以用另一个数组覆盖一个数组的内容,通过这样做,我如何解决数组大小丢失的问题

假设我有两个数组

int a[] = {1,2,3,4,6,7,8};
int b[] = {1,6};

// How can I overwrite the array a with array b, so get the following?:
a[] = {1,6};


你不能这样做,就像@Klutt&@david ranieri在评论中说的那样,你可以复制
a
b
的内容,然后用0填充。
但我建议使用动态数组,您可以执行以下操作:

// initialise with braced-init-list
int* a = new double[8] { 1, 2, 3, 4, 5, 6, 7, 8};
int* b = new double[2] { 1, 6};

delete[] a;
a = b;

当您声明一个数组(如[]={…})时,该数组将获得一个无法更改的固定大小,该大小将在编译时确定

如果您想使用动态数组,您需要在堆上进行分配,在C中,这是通过malloc和realloc完成的。realloc允许您调整数组的大小

e、 g

您应该检查realloc的返回值,以了解realloc是否成功

char* q = realloc(p, 5);
if (q != NULL) // successful

ref:

您不能更改数组的大小。您必须用零或其他东西填充其余部分。动态数组可以缩小和扩展。创建动态数组,然后通过减小/增大一个数组的大小将其复制到另一个数组。
memcpy(a、b、sizeof(b));memset(a+(sizeof(b)/sizeof(b[0])),0,sizeof(a)-sizeof(b))因为无法在运行时更改数组的大小。你得做点别的。这是不可能的建议,因为“某事”将取决于你试图实现什么。所以,问一个具体的例子,你需要这样做。例如,您可能有一个sentinel值来指示有用数据的结束,或者有一个包含有用数据长度的附加变量。数组大小的损失比增加问题小!;-)可以相互分配指针与指针指向的存储的创建方式无关;-)我不同意,如果创建一个大小为
8*sizeof(int)
的数组(堆栈),则无法将其转换为大小为
2*sizeof(int)
的数组,但如果使用指针(堆)您只能指向分配区域的开始,这样您就可以告诉内存,现在
a
指向
b
所指区域的开始,您可以为数组分配指针,无论数组在哪里。
char* q = realloc(p, 5);
if (q != NULL) // successful