gpt4 book ai didi

c - 从数组中提取切片的正确方法

转载 作者:太空宇宙 更新时间:2023-11-04 07:45:12 25 4
gpt4 key购买 nike

我有一个辅助函数来对应该返回数组的数组进行切片。它成功返回,但在一遍又一遍地执行该函数后,它开始返回不是数组索引的数字。请帮助我,因为我还在学习。

这里是切片函数。我还尝试将 new_arr 设为静态,但出现编译常量错误。

int *slice(int arr[], int beg, int end)
{
int i;
int *new_arr = malloc(sizeof(*new_arr)*sizeof(int));
for(i=beg; i< end; i++)
{
new_arr[i] = arr[i];
// printf("new_arr[%d] = %d\n", i, arr[i]);
}
return new_arr;

}

这是主要:

int main(void)
{
int arr1[] = {2, -3, 3, 1, 10, 8, 2, 5, 13, -5, 3, -18};
int arrSize = sizeof(arr1);
int length = arrSize/sizeof(int);
int div = length/4;
int *winter;
int *spring;
// int *summer;
// int *autumn;
winter = slice(arr1, 0, div);
spring = slice(arr1, div, div*2);
// summer = slice(arr1, div*2, div*3);
// autumn = slice(arr1, div*3, div*4);



// int i;
printf("%d", spring[1]);

// printf("%d", arrSize);

}

我希望函数与数组中的值保持一致。

最佳答案

从您的函数名称可以看出,您希望通过分配一个新数组并从原始数组复制值来从现有数组中获取一个切片。

你的函数有一些问题:

  1. malloc(sizeof(*new_arr)*sizeof(int))是错误的,和malloc(sizeof(int)*sizeof(int))是一样的,这是不正确的,无论您需要什么,总是分配相同数量的空间。
  2. 您正在使用 begend 进行迭代,而没有任何绑定(bind)检查信任新分配的数组上的值,这也是错误的。
  3. 您一直在使用 int,这可能会导致大数或负数出现问题,您应该改用 size_t

实现您想要的目标的正确方法如下:

int *slice(int arr[], size_t beg, size_t end)
{
size_t size, i;
int *new_arr;

size = end - beg;
new_arr = malloc(size * sizeof(int));

for (i = 0; i < size; i++)
new_arr[i] = arr[beg + i];

return new_arr;
}

关于c - 从数组中提取切片的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57750118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com