转出的结果只有第一位p而不是please,请大家帮忙看看。std:: fstream str; 
str.open(path,ios::out);
char *ch1;
CString m_p="please";
ch1=new char[m_p.GetLength()+1];
sprintf(ch1, "%s",m_p);
str<<ch1<<endl;
delete[] ch1;
str.close();

解决方案 »

  1.   

    unicode工程吧大写S
    sprintf(ch1, "%S",m_p);
      

  2.   


    UNICODE工程应该编译不过的吧
      

  3.   


    LZ说只有第一位p而不是please,按照unicode的英文存储方式,英文占2个字节,第一个字节是和ansi一样的值,第二个字节是0,而sprintf这种字符串函数是以0判断字符串结束的,故我想应该是unicode工程的原因
      

  4.   


    但如果是UNICODE工程的话,sprintf(ch1, "%S",m_p);应该是sprintf(ch1, _T("%S"),m_p);或sprintf(ch1, L"%S",m_p);不然编译器应该会报错吧
      

  5.   

    但CString m_p="please"; 应该是CString m_p=L"please"; 或CString m_p=_T("please");
    不然UNICODE工程应该编译不过 
      

  6.   

    我觉得也是unicode的问题,目前版本2008 目前编译都可以通过,改成sprintf(ch1, _T("%S"),m_p),后编译通不过了
      

  7.   

    使用WideCharToMultiByte 将unicode转换后 问题解决 谢谢各位