//------1-------CString s;
int i=0;s.Format("%d",i);
pDC->TextOut(0,0,s);
//------2------CString *s;
int i=0;s->Format("%d",i);
pDC->TextOut(0,0,s);为什么1能够执行,2就不行呢??

解决方案 »

  1.   

    //------2------
    1、S 没有初始化
    2、TextOut的定义如下virtual BOOL TextOut(
       int x,
       int y,
       LPCTSTR lpszString,
       int nCount 
    );
    BOOL TextOut(
       int x,
       int y,
       const CString& str 
    );在1中,根据参数类型,是前一种情况
    在2中,是后一种情况,有于CString *s;只定义,没初始化
      

  2.   

    BOOL TextOut(
       int x,
       int y,
       const CString& str 
    );这个表示的是CString的引用吧。好像没有用CString的指针作为参数的用法吧?
      

  3.   

    Cstrig *s---------------------------
    用*声明的变量是指针变量,在使用前都需要先分配内存
      

  4.   

    s->Format("%d",i);s没有传进去值,自我感觉用到CStrig *s的不多,但用时一定要先分配内存
      

  5.   

    这个道理和 Object obj; Object* pOjb;是一样的。

    BOOL TextOut(
    int x,
    int y,
    const CString& str
    );这个表示的是CString的引用吧。好像没有用CString的指针作为参数的用法吧?
    ------------
    传指针和引用都是传的地址。
      

  6.   

    To hjunxun,
    如果你用textout 直接将指针作为参数,比如CString * pStr,然后textout(x,y,pStr),你试试编译能通过不?我这里不成,
     cannot convert parameter 3 from 'class CString *' to 'const class CString &'
    其实错误不在TextOut上,而是在Format上,还是内存分配的问题,如果你有一个
    CString * pStr=new CString();然后再Format,就没事了。
    调用的时候就TextOut(x,y,* pStr);即可。至于传值的问题,其实从format的arglist中已经读入了相应的字串,在其用GetBuffer获取缓冲的时候出的问题,对应的指针未分配内存,是NULL,因此就出错了。