c string(cstring转char*函数)

  你的程序有多个问题
首先你使用了上世纪就已淘汰的教材及编译器(VC 6c string。
  0)
及void main()是非标准的头文件,只有vc 6才支持的
改及int main()并用using namespace std;这样无论是什么C 编译器都支持
其次,你用的string是C 已存在的类,有二义性,建议改名,如mstring
当然,关键的错,是你用的
string string::operator (string s)
这个是无论是参数还是返回值,就是复制方式的,在它退出时会调用析构函数,这样在main退出是又会调用一次析构,可能会产生崩溃(这个是随机的)
若你要这样写,你的
~string(){delete[] str;}
要改
~string(){
if (str!=NULL)
delete[] str;
str=NULL;
}
缺省构造,最好也加str=NULL;
当然,考虑效率及安全性,最好是改
string string::operator (string s)

string &string::operator (string &s)。

c string(cstring转char*函数)

C\C 关于string.h头文件和string类

你可以用标准的string,也可以用CString。如果没什么必要还是用string吧。
之所以有CString,那是历史原因。CString诞生的时候,C 标准还没出来。
--问题补充:为什么Turbo C 3.0却不可以用string呢?
--tc 3可以编c 的啊,怎么连string都用不了?
C 标准是98年出来的。tc3是98年以前出来的,所以你应该用新点的编译器。用VC2005,这个比较符合标准

c string(cstring转char*函数)

String类的String()构造器有用吗?

   有用!

如果单纯的用\"\",它只能算是一个变量!可以先来看一个例子:

String s=\"hello\"; String t=\"hello\";

String s1=new String(\"hello\");String t1=new String(\"hello\");

--------------------------------

表达式 返回值

s。
  equals(t) true

s==t true

s1。
  equals(t1) true

s1==t1 false

---------------------------------

从返回值可以看出,s和t有相同的内存地址,而且值也一样!

s1和s2虽然内容相同,但是内存地址不同!就是说他们是两个不同的对象!

String s=\"hello\",这条语句,jvm会去查找内存中有没有与\"hello\"内容相同的string变量,发现没有就新建一个,接下来,

String t=\"hello\",这条语句,jvm又会去查找,这次发现已经有了一个,于是就直接让t指向s指向的字符串!

用new的话就会告诉虚拟机新建一个实例,这个时候它会强制跳过在内存中查找这一步,直接生成一个新的对象,分配新的内存!

这样一看的话,String的构造方法还是有它的用处的!

----------------

无参数构造函数,那个是JVM默认的,这是机制,没有办法改变!虚拟机这么规定,相信肯定有他的用处!\"\"和new String()虽然都不是实际的字符串,可代表的意义终归还是不一样!跟前面的讲述也无太大差别!\"\"始终是一个变量,而new String是一个默认的空String对象!。