CString m_url;
m_password = "888888";
char password[40];
sprintf_s(password,"%s",m_password);// 调试时发现url的值是"8",而不是"888888"为什么,怎么办!急啊!感谢!

解决方案 »

  1.   

    CString m_url; 
    m_password = "888888"; 
    char password[40]; 
    sprintf_s(password,"%s",m_password.GetBuffer());// 调试时发现url的值是"8",而不是"888888" 
      

  2.   

    乱套了,一急就乱,应该是:
    CString m_password; 
    m_password = "888888"; 
    char password[40]; 
    sprintf_s(password,"%s",m_password);// 调试时发现password的值是"8",而不是"888888" 1楼的GetBuffer()好像没有用啊
    password[0]=56'8'
    password[1]='0'
    password[2]='-3'
    password[3]='-3'
    password[4]='-3'
    ...
      

  3.   

    少一个参数
    sprintf_s(password,40,"%s",m_password);
    试试.
      

  4.   

    sprintf_s(password,m_password.GetLength(),"%s",m_password);
      

  5.   

    莫有用啊,楼上的,password从第7位开始变成-52而已,前面没有变化
      

  6.   

    LZ确定是2005吗,要知道在2005下,CString里的字符串默认是UNICODE的,
    而char是ANSI的,这两都当然不能这样直接换。LZ可先将CString转成ANSI字符串,再转吧。
      

  7.   

    可能是Unicode编码的问题,不过字符串转字符串没必要这么做啊,直接复制就可以了;另一方面CString就可以拿来用,又为什么要另外搞一个字符串?如果是为了编码问题,也应该用编码转换函数进行转换。
      

  8.   

    CString m_password;
    m_password = "888888";
    TCHAR rgsz_password[40];
    _stprintf_s(rgsz_password[40], 40, TEXT("%s"), m_password.GetBuffer());没有测试,你看看对不对?
    不懂的话,去看看MSDN吧
      

  9.   

    CString m_password; 
    m_password = _T("888888"); 
    TCHAR password[40]; 
    memset(password,0,sizeof(password)); 
    //_tcscpy(password,m_password.GetBuffer()); 
    //m_password.ReleaseBuffer(); 
    wsprintf(password,_T("%s"),m_password);
      

  10.   

    char mbMess[1024];
    LPTSTR txt1=text1.GetBuffer();
    USES_CONVERSION;   
    const   char*   pSth1=T2A(txt1);
    text1.ReleaseBuffer();
    strcpy(mbMess,pSth1);
      

  11.   

    谢谢各位,我用CStringA 将Unicode转换成ANSI类型,然后用sprintf_s进行转换的,特别感谢7楼的,思路和方向很重要,其他朋友的方法我没有试,多谢给位,以后看到这个帖子也有同样疑惑的朋友,请注意了,网上很多方法都是在vc6下实现的,vc2005下的字符编码要考虑到
      

  12.   

    vc2005
    在开始创建工程的时候,可以选择是否使用Unicode还是ANSI类型