读书人

字符串指针的一些迷惑

发布时间: 2012-07-26 12:01:08 作者: rapoo

字符串指针的一些疑惑
小弟最近被字符串指针搞晕了

CString *a,b="abc";

*a="abc"; //错误

a="abc" //错误

*a+=b; //错误


char *a;

*a="abc"; //错误

a="abc"; //可以



这个能有人给讲讲是肿么回事么,晕了直接都


[解决办法]
CString *a,b="abc";

*a="abc"; //错误a相个未初始化的指针,这样肯定错了。

a="abc" //错误,同上

*a+=b; //错误同上


char *a;

*a="abc"; //错误同上

a="abc"; //可以,给指针初始化正确。

[解决办法]
基本上错误是没有给指针申请内存

CString *a=new CString;
char *a=new char[10];
strncpy(a,"abc",10);
[解决办法]
char *a;//是指你定义了一个指向char类型指针

*a="abc"; //错误

a是指向char类型的指针也就意味着*a的类型是char,错误就好比是char b; b="abc";

a="abc"; //可以
a是指向char类型的指针,把字符串地址赋给a也就是把字符串首地址赋给了a
也就等价于 *a='a';*(a+1)='b';*(a+2)='c';*(a+3)='\0';
至于CString你如果把定义搞清的话 解释同上
你可以把定义发出来
不过解释应该是类似的


[解决办法]
楼主犯了个概念错误:string为字符串数据类型,而不是字符串!
CString是类似string的一种数据类型,同样也不是字符串。
class的指针类型必须要有源数据,楼主的问题在于CString *a缺乏数据源,*a="abc"导致存储单元不确定错误,a="abc"则导致数据类型引用不一致错误,*a+=b同样是存储单元不确定错误。
如果这样写就可以:a = &b; *a="abc"; 或 a = new CString();*a="abc";
char *a;为字符串,也叫字符串指针(沿袭早期C语言习惯,在C++里应称之为字符串指针)。*a="abc";引发类型不一致错误:*a为字符单元,而非字符串。

读书人网 >C++

热点推荐