有关C++字符转换的一点小总结

1.C-串
    在C++中有两种字符串,一种是从C沿袭过来的,称为C-字符串,简称C串。C串是以一个全0位(整数0)字节作为结束符的字符序列。因此C-串又被称为ASCIIZ串(即ASCII字符序列加上尾巴Zero)。
    C-串的类型为char*型,说得更精确一点,是const char*型。char*称为字符指针,它与字符数组虽然类型不同,但操作上是一样的,都表示C-串的起始地址。例如:
    char* str="Hello!";
   cout<<*str<<endl;        //显示H
    cout<<str<<endl;         //显示Hello!
    str是字符指针变量。*str是字符指针变量的间接引用。即,若str指向"Hello!"的首地址,则*str表示该地址代表的空间上的值----'H'。输出字符指针就是输出C-串,所以输出str时,便从'H'字符的地址开始,输出所有字符直到遇到0.
    C库函数设计了一系列的C-串库函数,解决C-串的赋值、复制、修改、比较、连接等问题。例如:
 
2.string
    string是一种自定义的类型,它可以方便地执行C-串所不能直接执行的一切操作。它处理空间占用问题是自动分配,需要多少用多少,不像字符指针那样,提心吊胆于指针脱钩时的空间游离。它可以从C-串转换得到,还可以从内部提炼出C-串。
 
    小心内存泄露
 
由字符数组构造string也是可以的:
 
3.CString
    CString是微软的visual c++提供的MFC里面的一个类,所以只有支持MFC的工程才可以使用。你如果想在Linux的工程上使用那是不现实的,只能用标准C++的string类。另外,国为string类是在C++标准库中的,所以它被封装在了std命名空间中,使用之前需要声明using namespace std;而CString类并不在std命名空间中,因为它不是C++的标准库,只是微软的一个封装库。CString类和string类提供的方法接口并不完全相同,所以不要糊里糊涂地认为某个类中怎么没有另一个类中的方法。此外,他们和char*之间的转换方法也不一样。下面研究一种CString向char转换的方法。
 
 
4.向CString的转换
    在研究如何将C-串(char*)、string向CString转换之前先了解它们各自的构造方式,对于CString来说,如下所示,仅仅列举了三种构造方式。
 
 
 
string类对象和C-串也有那么几种构造方式,如:
 
 
 
通过前面的信息,我们了解到可以利用一个已知的C-串来构造CString对象,那么C-串又如何得来呢?有两种思路,一种是来自C-串本身,也就是我们事先定义好的C-串,另外也可以由string对象利用c_str()方法转化而来。注意c_str()的利用,c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同,其原型为:const char *c_str( )
 
 
 
 
 
5、其它类型转为字符数组型转化为C-串,string
 
 
 
 
注:如果你想这么做的话得注意字符数组后面得有'\0'(是0不是o),这样才能构成一个完整的字符串,如果不加'\0'会出现乱码的。
 
6.字符串存储字符数组
注:我们知道字符串是以'\0'结尾的,所以即使"LiuJiang.txt"的字符长度为11,但是我们在申请空间以复制该字符串时所申请的空间仍然应该是其字符长度+1。最后一个字节是留给结束符的,赋值的时候也应该将这个结束符一同传递过去,目的字符串此时的字符长度仍然保持原值。
 
 
   
 
 
 
 
 
posted @ 2013-01-25 10:25  吹个球  阅读(203)  评论(0编辑  收藏  举报