+ -
当前位置:首页 → 问答吧 → 关于char* 和char[]

关于char* 和char[]

时间:2011-12-07

来源:互联网

最近在做课程设计和OJ,对char* char[]有些感想,当我想定义一个字符数组时,如果我用char*,那么只能直接初始化,不能先定义char* str;然后cin>>str;如果是用char[]那么我必须先定义char[len]即要先定义一个一定长度的字符数组,但有时输入的长度不一样,那么就会造成内存浪费。假如不用STL的string。小弟菜鸟一个,问问高手怎么解决这个问题?

作者: jackhanzy   发布时间: 2011-12-07

一等, 给你写个封装, 让你马上对C语言从0学起.

作者: qq120848369   发布时间: 2011-12-07

用char []方式定义字符数组有两个方法:

一种是不指定长度,编译器会自动帮你分配大小是5个字节的空间:
char str[] = "csdn";
另一种是指定长度:
char str[5] = "csdn";

两种方法都需要提前知道字符串的大小,或者定义一个很大的值,比如char str[10000]; 但这样就有你说的浪费内存。

如果你不用std::string,可以在堆上分配一段空间:
char *str = (char*)malloc(N + 1); //C。N取决于字符串大小
或者
char *str = new char[N + 1]; //C++

用完之后记得释放空间:
free(str); //C
或者
delete str; //C++

如果是C++的话还是建议用std::string吧,C的话定义一个合理的常量来分配一个定长字符数组也未尝不可。

作者: tonywearme   发布时间: 2011-12-07

假如不用STL的string,那就用vector。。哈哈,

作者: wallwind   发布时间: 2011-12-07

vector吧,动态申请,

作者: zhang20072844   发布时间: 2011-12-07

等会再给你写,dota先了,哈哈。

作者: qq120848369   发布时间: 2011-12-07

你可以用new delete分配和释放动态空间解决

作者: ssstet123   发布时间: 2011-12-07

有时候浪费是必须的。

作者: pathuang68   发布时间: 2011-12-07

用容器。vector 动态分配!!!

作者: timerfire   发布时间: 2011-12-08