char *ch;
并不是定义一个字符串,它只是定义了一个字符指针。
在Win32中它是四个字节。C++中CString所谓的动态存储的实现,是由类的编写
者在类的内部实现的,实质上也是需要在类中调用
malloc() realloc()一类的函数来实现。

解决方案 »

  1.   

    呵呵,第一个问题,我建议你试一下:
    ch *c;
    *c = 'a';
    就知道怎么回事了.如果不为指针分配内存,那么这个指针或者需要指向已经定义的内存块,否则使用时就会出现非法操作.一般比较安全的作法是不用的指针设为0值(NULL),这样,即使没有给这个指针分配内存就使用这个指针,也只会出现非法操作,而不会出现不可预计的后果.CString的内部实际上也是一个字符指针,但是据我所知的做法是其还维护了这个指针指向的内存的长度,在长度不足时,指会释放这段内存,然后重新申请更大的内存.
      

  2.   

    CString 毛病多多,速度极慢。例如:重载操作符“+”
    CString cs1,cs2;
    cs1 = cs1+cs2;
    需要执行创建cs1副本,删除cs1,创建大的cs1...
      

  3.   

     定义字符串指针后,你还必须为谝指针分配内存才能操作该指针,常用如下做法。
    char *c=NULL;
    c=new char[100];
    sprintf(c,"1223444");
    printf("%s",c);
    delete c[];
    c=NULL;
    当然,你也可以定义字符串数组,这样比较方便,不要自己删除指针,如果用指针,一定要记得删除,而用数组的话操作系统会保证清空的,当然,用数组时别忘了初始化。
      

  4.   

    我想你的疑问应该就是char *ch中ch的地址是怎么样的,其实与C语言一样,系统为ch只不过按字符型分配了一个内存单元,而用NEW 分配后,得到的地址值是放在ch的存储单元的,CString 也与此同理。