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

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

《C和指针》练习题11.11

问题

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

代码


      #include <stdio.h>
      #include <malloc.h>
      #include <stdlib.h>
      #define N 50
      int *readline(void);
      void main(void)
      {
     	int *string = readline();
     	printf("%d\n",*string);
     	free(string);
      }
      /* 为一列整数动态分配空间
       * 输入:一列整数值
       * 处理:动态分配合适大小的堆空间,并将这一列数存入
       * 返回:指向堆空间的指针
       */
      int *readline()
      {
     	int *array = NULL;
     	int size;
      	size = N;	//堆空间的初始大小
      	array = (int *)malloc( (size+1)*sizeof(int) ); //array[1] - array[size]用于存储数值
     	if( NULL == array )
      	{//分配空间失败
     		printf("malloc faild\n");
     		exit(-1);
      	}
     	int value;
     	int count = 0;
     	printf("\n>>");
     	while( scanf("%d",&value) == 1 )
      	{
      		count++;
     		if( count > size )
      		{//动态增加内存块的空间,N个单元
      			size += N;
      			array = realloc( array, (size+1)*sizeof(int) );
     			if( NULL == array )
      			{//修改空间失败
     				printf("realloc faild\n");
     				exit(-1);
      			}
      		}
     		if( count < size )
      		{//动态减小内存块的空间,精确调整空间大小
      			array = realloc( array, (count+1)*sizeof(int) );
     			if( NULL == array )
      			{//修改空间失败
     				printf("realloc faild\n");
     				exit(-1);
      			}
      		}
      		array[count] = value;	//填充数值
     		printf("\n>>");
      	}
      	array[0] = count;
     	return array;
      }
  
 

结果

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

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

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

作者其他文章

评论(0

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

    全部回复

    上滑加载中

    设置昵称

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

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

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