rambo

搞清char*与string

Definition:

1.char *是一个指针(指向一个字符串数组),这个数组可以在栈上分配,也可以在堆上分配。

2.string可以被看成是以字符为元素的一种容器,字符构成序列(字符串)。标准的string类提供了STL容器接口,比如begin()end(),迭代器可以根据他们进行定位。

char*效率比string高,使用string的时候一定要注意构造和拷贝以及析构带来的性能开销,尽可能的减少构造,能使用引用的地方尽量用引用,减少不必要的构造。

string char*转换:

注意:只能转换成const char*,如果去掉const编译不能通过。具体可以查看stl的内部实现<xstring.h>

当前我们需要将xx.txt提取出姓名xx

血的教训:注意string 转char*的时候内存开辟必须是

而不是

这个BUG极其容易被忽视!!!

char*与string 转换:

char* name="ramsey"; 注意:char*会在结尾添加’\0’作为结束符。

string s1=name;  注意:这边只是将name的首地址传给s1

int len=sizeof(name) 输出len4,即char*指针的长度。

char ss='s'; int i1=sizeof(ss); char的长度为1x86)。

如何统计name的长度(一个英文字符占1ascii码,中文字符占2ascii码)

当前我们需要将char*中的内容(输入姓名)转换到一个新定义的string中,同时采用stl string"+"操作符在路径"D:\\database\\"创建txt

内存管理:

string的内存管理是由系统处,其内部自己实现内存的申请与释放。不易出错。

char *的内存管理由用户自己处理,很容易出现内存不足的问题。
string
缺点是其内部申请的内存要大于你要使用的内存,原因是便于数据的动态扩展,并且不同容器对内存的管理策略也不尽相同。完成同样的一个任务可能会有多种方式,在不了解内部实现的情况下,不一定能够使用最有效率的方法完成任务。
所以,在已知大小的情况下使用char*char[]比较好,在效率和内存使用上。
在未知长度,并且总体上并不会占用很多内存,对效率要求不高,或者没有限制内存与效率的情况下使用string