在c语言中如何实现数组的动态输入?
头文件malloc.h
使用malloc来申请一个初始地址空间。
然后在循环输入的过程中不断检查初始空间是否已满,满了就是使用realloc来扩展地址空间。
最后,如申请的地址不需要使用了,且程序没有结束,需要用free来释放。
另外,使用malloc或realloc申请时,需要先判断下返回值是否为空,如有异常申请失败,用空指针直接使用,会造成程序错误。
下面简单示范:(初始申请2个字节,之后每次输入字符扩展1个字节,回车结束输入)
#include <stdio.h>
#include <malloc.h>
int main()
{
int len=2;
char *a=NULL,*aSave=NULL,c;
a=(char*)malloc(sizeof(char)*len);
if(!a)
return 1;
a[0]=0;
while(1)
{
c=getchar();
if(c==10)
break;
if(a[0]==0)
a[0]=c,a[1]=0;
else
{
aSave=realloc(a,sizeof(char)*len);
if(!aSave)
return 1;
a=aSave;
a[len-2]=c,a[len-1]=0;
}
len++;
}
printf("输入的字符串数组是:\n%s\n",a);
free(a);
return 0;
}