c关于数组所占内存大小问题

如果定义数组char a[1000];
在进行输入时cin>>a;
比如只输入了3个元素,再加上'\0',那其他996个字节岂不是浪费了?
有没有办法输入多少个元素占用的内存就是多少?不会造成内存浪费
小弟初学者,有很多地方不懂,谢谢各位了!!!

在C++中可以用string类保存字符串。

在C中,可以通过malloc()和realloc()配合动态分配存储空间,例如:

//---------------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>

char *getline(void) /*读取一个以回车结尾的字符串,保存在动态分配的空间中,并返回这个字符数组的首地址*/
{
char b,*a=NULL;
int ln=0;
while ((b=getchar())!='\n')
{
a=(char *)(a?realloc(a,sizeof(char)*(ln+1)):malloc(sizeof(char)));
a[ln++]=b;
}
if (a) {
a=(char *)realloc(a,sizeof(char)*(ln+1));
a[ln]='\0';
}
return a;
}
int main(void)
{
char *str;

printf("%s",str=getline());

free(str); /*由于str指向的空间是动态分配的,所以要用free()函数将其释放*/
return 0;
}
//---------------------------------------------------------------------------
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-06-15
1.使用动态数组

cin>>n
char *str=new char(n);
然后str就可以使用了 str 的大小由n来决定
使用完后要记得delete

2.其实只要定义为局部变量 其实基本上是不影响程序内存大小的
而且这点数据量完全可以忽略不计~
第2个回答  2019-01-31
用来存放字符量的数组称为字符数组。
字符数组类型说明的形式与数值数组相同。例如:
char
c[10];
由于字符型和整型通用,也可以定义为int
c[10]但这时每个数组元素占2个字节的内存单元。字符数组也可以是二维或多维数组,例如:
char
c[5][10];即为二维字符数组。
字符数组也允许在类型说明时作初始化赋值。例如:
static
char
c[10]={`c`,`
`,`p`,`r`,o`,g`,r`,`a`,`m`};赋值后各元素的值为:
数组c
c[0]c[1]c[2]c[3]c[4]c
[5]c[6]c[7]c[8]c[9]其中c[9]未赋值,由系统自动赋予0值。
当对全体元素赋初值时也可以省去长度说明。例如:
static
char
c[]={`c`,`
`,`p`,`r`,`o`,`g`,`r`,`a`,`m`};这时c数组的长度自动定为9。
用字符串方式赋值比用字符逐个赋值要多占一个字节,
用于存放字符串结束标志'\0'。
相似回答