首页 > 解决方案 > scanf 从函数到数组

问题描述

我正在尝试使用指向指针的指针将值从另一个函数扫描到数组。这是代码:

int initialize(int **arr, int count);

int main()
{
    int count;
    int *numbers;
    scanf("Enter the amount of numbers to enter: %d", &count);
    initialize(&numbers, count);
    free(numbers);
    return 0;
}

int initialize(int **arr, int count)
{
    int i = 0;
    *arr = calloc(count, sizeof(int));
    while(i < count)
    {
        printf("Nr. %d: ", i + 1);
        scanf("%d", &arr[i]);
        i++;
    }

    return 0;
}

它正确分配了内存,但是,scanf 函数内部似乎存在初始化问题,因此它在读取前 2 个数字后崩溃。你能帮忙解决吗?

标签: carrayspointersmemoryscanf

解决方案


arr是指向 的指针的指针int,因此首先通过 . 使其成为指向int(在像数组一样使用它之前)的指针*arr

所以这

    scanf("%d", &arr[i]);

应该

    scanf("%d", &(*arr)[i]);

或其较短的等价物

    scanf("%d", *arr + i);

不相关,但在 C 中至少应该是

int main(void)

不相关^2:C 中的大小和索引最好使用size_t(附带stdlib.h)定义。

因此,您的代码的相关部分将如下所示:

int main(void)
{
  size_t count;
  int *numbers;
  scanf("Enter the amount of numbers to enter: %zu", &count);
  ...

int initialize(int **arr, size_t count)
{
  size_t i = 0;
  *arr = calloc(count, sizeof(int));
  while (i < count)
  ...

最后并非最不重要的代码错过了相关功能的错误检查:

  • scanf()
  • calloc()

错误检查(连同记录错误)正在免费调试!


推荐阅读