首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从函数到数组的扫描

从函数到数组的扫描
EN

Stack Overflow用户
提问于 2018-10-07 19:42:05
回答 1查看 70关注 0票数 2

我尝试使用指针将值从另一个函数扫描到数组中。代码如下:

代码语言:javascript
复制
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个数字后崩溃。你能帮我解决吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-07 19:46:56

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

所以这就是

代码语言:javascript
复制
    scanf("%d", &arr[i]);

应该是

代码语言:javascript
复制
    scanf("%d", &(*arr)[i]);

或其较短的等价物

代码语言:javascript
复制
    scanf("%d", *arr + i);

无关,但在C中它至少应该是

代码语言:javascript
复制
int main(void)

不相关的^2:C best中的大小和索引是使用size_t (随stdlib.h提供的)定义的。

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

代码语言:javascript
复制
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()

错误检查(以及记录错误)是免费的调试!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52688145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档