• 全部
  • 问答

如果我不知道他要输入多少个字符,怎么开辟内存??

yesman 2002-12-21 01:34:51
char* ch = new char[20];
但是如果我不知道他要输入多少个字符呢
我怎么开辟内存比较好
...全文
19 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
rushman 2002-12-21
不知道要输入多少字符,如何分配数组大小。
因此关键还是解决溢出问题。

还有一种方法,就是一个字符一个字符的读。也可以避开这个问题。这样控制起来很灵活,但是也很麻烦。
回复
qqbigdog 2002-12-21
用动态组建一个数组,char *p=new char[];
就好拉
回复
rushman 2002-12-21
不赞成开辟大缓冲区的方法。缓冲区再大也可能溢出。
而且在通常情况下,如果没有必要不要使用动态分配的内存,而应该尽量在栈中分配临时变量。
回复
rushman 2002-12-21
补充一下:
如果缓冲不够大,还可以将一行分多次读取,再接到一起。
回复
俞庆平 2002-12-21
同意::Zark(金陵五月)
通常的方法是先开256字节,在堆上,用NEW.因为通常这个是输入缓冲区的长度,如果发现不够了,再在堆上开256*2字节,将原来的内容拷贝进去,把原来的DELETE掉.如此反复.
回复
rushman 2002-12-21
用fgets或cin.getline等类似的函数可以保证不溢出。
回复
sjd163 2002-12-21
学习
回复
Zark 2002-12-21
通常的方法是先开256字节,在堆上,用NEW.因为通常这个是输入缓冲区的长度,如果发现不够了,再在堆上开256*2字节,将原来的内容拷贝进去,把原来的DELETE掉.如此反复.

用VECTOR是个省事方法,但VECTOR的原理是以上所说的一样的.

回复
prosong 2002-12-21
/**看看这个*/
#include "string.h"
#include "stdlib.h"
#include "stdio.h"

/*就假设回车结束*/
char* getData(){
int BUF_SIZE=16;
int bufSize = BUF_SIZE;
char ch = '\0';
int pos = 0; //字符所在的位置
char * tmp= 0; // 临时变量

char *buf = (char*)malloc(bufSize);

while((ch=getchar())!='\n'){
buf[pos]=ch;
pos++;
buf[pos] = '\0';
if(pos>=bufSize-1){
bufSize += BUF_SIZE;
tmp = (char*)malloc(bufSize);
strcpy(tmp, buf);
free(buf);
buf=tmp;
}
}

return buf;
}

int main(){
char* buf = getData();
printf("%s", buf);
free(buf);
return 0;
}
回复
handboywj 2002-12-21
用char* ch = new char[20];
回复
yatuor 2002-12-21
用vector
回复
相关推荐
发帖
C语言
创建于2007-09-28

6.3w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2002-12-21 01:34
社区公告
暂无公告