欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C和指针 (pointers on C)——第十一章:动态内存分配(下)习题

程序员文章站 2022-03-11 18:31:52
...

1、编写calloc,内部用malloc。

void *calloc (size_t n, size_t size)
{
	char * memory;
	memory =(char*) malloc(n * size);
	while( memory != NULL)
	{
		char * ptr;
		ptr = memory;
		while ( --n >= 0)
		{
			*ptr++ = '\0';
		}
	}
	return memory;

}
2、编写一个函数,动态存储一列输入的整数。

#include <stdlib.h>

int * readints()
{
	int *array;
	int value;
	int length = 1;
	array = (int *) malloc(length * sizeof(int));
	if (array == NULL)
	{
		return NULL;
	}
	while ( scanf_s("%d", &value) == 1)
	{
		length++;
		array =(int *) realloc(array,  length * sizeof(int));
		if (array == NULL)
		{
			return NULL;
		}
		array[length-1] = value;
	}
}

3、编写一个函数,动态存储一列输入的char。


#include "stdlib.h"

char * readstring()
{
	char *array;
	char *ptr;
	int length = 1;
	array = (char *) malloc (sizeof(char));
	gets(ptr);
	if (ptr == NULL)
	{
		exit (EXIT_FAILURE);
	}
	while (*ptr != NULL )
	{
		length++;
		array  = (char *) realloc (array , length * sizeof(char));
		if (array == NULL)
			exit (EXIT_FAILURE);
		array[length - 1] = *ptr;
		ptr++;
	}
	//追加一个NUL
	array  = (char *) realloc (array , (length++) * sizeof(char));
	if (array == NULL)
		exit (EXIT_FAILURE);
	array[length - 1] = '\0';
	return array;
}