【C语言练习题】动态分配内存

举报
王建峰 发表于 2021/11/19 00:55:56 2021/11/19
【摘要】 《C和指针》练习题11.11   问题 编写一个函数,从标准输入读取一列整数,把这些值存储于一个动态分配的数组中并返回这个数组。函数通过观察EOF判断输入列表是否结束。数组的第一个数是数组包含的值的个数,他的后面就是这些整数值   代码 #include <stdio.h>#include &...

《C和指针》练习题11.11

 

问题

编写一个函数,从标准输入读取一列整数,把这些值存储于一个动态分配的数组中并返回这个数组。函数通过观察EOF判断输入列表是否结束。数组的第一个数是数组包含的值的个数,他的后面就是这些整数值

 

代码


  
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include <stdlib.h>
  4. #define N 50
  5. int *readline(void);
  6. void main(void)
  7. {
  8. int *string = readline();
  9. printf("%d\n",*string);
  10. free(string);
  11. }
  12. /* 为一列整数动态分配空间
  13. * 输入:一列整数值
  14. * 处理:动态分配合适大小的堆空间,并将这一列数存入
  15. * 返回:指向堆空间的指针
  16. */
  17. int *readline()
  18. {
  19. int *array = NULL;
  20. int size;
  21. size = N; //堆空间的初始大小
  22. array = (int *)malloc( (size+1)*sizeof(int) ); //array[1] - array[size]用于存储数值
  23. if( NULL == array )
  24. {//分配空间失败
  25. printf("malloc faild\n");
  26. exit(-1);
  27. }
  28. int value;
  29. int count = 0;
  30. printf("\n>>");
  31. while( scanf("%d",&value) == 1 )
  32. {
  33. count++;
  34. if( count > size )
  35. {//动态增加内存块的空间,N个单元
  36. size += N;
  37. array = realloc( array, (size+1)*sizeof(int) );
  38. if( NULL == array )
  39. {//修改空间失败
  40. printf("realloc faild\n");
  41. exit(-1);
  42. }
  43. }
  44. if( count < size )
  45. {//动态减小内存块的空间,精确调整空间大小
  46. array = realloc( array, (count+1)*sizeof(int) );
  47. if( NULL == array )
  48. {//修改空间失败
  49. printf("realloc faild\n");
  50. exit(-1);
  51. }
  52. }
  53. array[count] = value; //填充数值
  54. printf("\n>>");
  55. }
  56. array[0] = count;
  57. return array;
  58. }

 

结果

文章来源: blog.csdn.net,作者:hinzer,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/feit2417/article/details/86221901

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。