我如何将两个整数阵列与for循环合并



我正在尝试合并两个数组,但似乎有一个问题。我尝试使用一个简单的循环,但它不起作用。我的第一个问题是我不知道如何停止数组循环,第二个是每次为合并的数组分配一些垃圾值时。如果有人可以给我一个方向……

int arr1[] = {1,2,3,4,5,0}, arr2[] = {6,7,8,9,0};
int x = 0, merge_arr[x], i = 0, x1 = 0;
for( ; arr1[i] != 0; i++)
{
    merge_arr[i] = arr1[i];
    printf("%di ", merge_arr[i]);
}
for( ; arr2[x1] != 0; i++)
{
    merge_arr[i] = arr2[x1];
    printf(" %di ", merge_arr[i]);
    x1++;
}
for(int x2 = 0; merge_arr[x2] != ''; x2++)
{
    printf("%dn", merge_arr[x2]);
}

作为c是一种程序语言,可以为此类操作定义函数很好。C标准为大小提供了特殊类型的size_t

int *concatIntArrays(int *dest, size_t maxSize, const int *arr1, const size_t arr1Size, const int *arr2, const size_t arr2Size)
{
    size_t toCopy;
    if(!dest)
    {
        dest = malloc(maxSize ? maxSize * sizeof(*dest) : (maxSize = (arr1Size + arr2Size)) * sizeof(*dest));
    }
    if(dest)
    {
        if(arr1Size <= maxSize) toCopy = arr1Size;
        else toCopy = maxSize;
        memcpy(dest, arr1, toCopy * sizeof(*dest));
        maxSize -= toCopy;
        if(arr2Size <= maxSize) toCopy = arr2Size;
        else toCopy = maxSize;
        memcpy(dest + arr1Size, arr2, toCopy * sizeof(*dest));
    }
    return dest;
}

或更多通用一个:

void *concatArrays(void *dest, const size_t elemSize, size_t maxSize, const void *arr1, const size_t arr1Size, const void *arr2, const size_t arr2Size)
{
    size_t toCopy;
    char *tempdest = dest;
    if(!dest)
    {
        dest = malloc(maxSize ? maxSize * elemSize : (maxSize = (arr1Size + arr2Size)) * elemSize);
    }
    if(dest)
    {
        if(arr1Size <= maxSize) toCopy = arr1Size;
        else toCopy = maxSize;
        memcpy(dest, arr1, toCopy * elemSize);
        maxSize -= toCopy;
        if(arr2Size <= maxSize) toCopy = arr2Size;
        else toCopy = maxSize;
        memcpy(tempdest + arr1Size * elemSize, arr2, toCopy * elemsize);
    }
    return dest;
}

所有尺寸在元素中的位置。在字节中进行元素。

您可以传递自己的缓冲区(目标数组(或空 - 然后该功能将为您分配。如果MaxSize为零,则可以根据需要分配任务以容纳两个数组的内存。

最新更新