0

我有数组 A,我想将此数组从位置 x 复制到 y 到 C 语言中的另一个数组。请帮助在 c 中创建它。

使用 memcpy 仅从头开始复制数组。我想从特定位置复制到另一个位置。

4

5 回答 5

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

memcpy( b, a + 5, 5 * sizeof( int ) );

您也可以使用普通的 for 循环来执行此操作

for ( int i = 0; i < 5; i++ ) b[i] = a[i+5];
于 2014-08-23T16:57:26.383 回答
3

由于您要复制到另一个数组中,因此可以使用memcpy()

memcpy(another_array, array + x, (y - x) * sizeof(*array));

如果您要复制到同一个数组中,则应memmove()改为使用。

memmove(array + z, array + x, (y - x) * sizeof(*array));

对于每个,第一个参数表示目的地,并且函数假设目的地有足够的空间来接受完整的副本。

于 2014-08-23T16:56:45.140 回答
2

memcpy如果这是您传递的地址,则仅从数组的开头复制。数组的名称a与第一个元素的地址同义&a[0],因此如果这样做memcpy(dest, src, size),则副本将从数组的开头开始src

指针算法可用于从数组中更远的点开始复制。例如,要从 array 中的元素 2 开始复制 10 个元素src,您可以这样做:

size_t size = 10 * sizeof (int);
int * dest = malloc(size);
memcpy(dest, src + 2, size);  // or equivalently, &src[2]
于 2014-08-23T16:56:51.340 回答
0
for(i=x, j=0; i<=y; i++, j++)
   AnotherArray[j]= A[i];
于 2014-08-23T17:35:29.343 回答
0

复制数组memcpy

void * memcpy (void * destination, void * source, size_t size)

memcpy函数从源内存位置复制一定数量的字节并将它们写入目标位置。(文档)

例子:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int some_array[] = {10, 11, 12, 13, 14};
    
    int memory_amount = sizeof(some_array);
    int item_count = memory_amount / sizeof(some_array[0]);
    int *pointer = malloc(memory_amount);
    memcpy(pointer, &some_array, memory_amount);

    while (item_count--)
        printf("%d=%d\n", item_count, *(pointer + item_count));

    free(pointer);
    return 0;
}

输出

$ ./a.out 
4=14
3=13
2=12
1=11
0=10
于 2021-04-19T12:55:10.110 回答