c - 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 个数字后崩溃。你能帮忙解决吗?
解决方案
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()
错误检查(连同记录错误)正在免费调试!
推荐阅读
- plot - GNUplot:将x轴设置为数组值
- python - 当python配置相同时,为什么多处理在一台机器上工作而不在另一台机器上工作
- mysql - Docker MySQL 容器无法从 Node.js Express-GraphQL 服务器容器访问
- powershell - Powershell 选择字符串或正则表达式
- mongodb - 根据不同的条件更新/插入不同的数组字段
- javascript - 如何通过 HTML 集合映射并向每个集合添加动态元素?
- javascript - Reactjs MySwal 无法显示 3 个按钮
- python - 计算列表中可被另一个数字整除的对象数
- python - 将列表嵌套在字典的值中
- reactjs - 为什么在子组件中使用时要在花括号中写道具