这是个小实验..对话框中有一个edit control控件,关联的变量是 CString m_content.还有一个button控件.
要求按下button控件后,将m_content 转换成 std::string str..然后写入文件中.再读出来.显示到窗口中.这是对button控件的处理.代码如下
void CdlgDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE);
CW2A aW2A((const wchar_t*)m_content); std::string str = (const char *)aW2A; ofstream f("data.dat",ios::binary);
         f.write((char *)&str,sizeof(string));
f.close();
string temp;
ifstream inf("data.dat",ios::binary|ios::in);
in.read((char*)&temp,sizeof(string));
inf.close();
CString cst(temp.c_str());
AfxMessageBox(cst);
OnOK();
}由于我对文件读写不是很懂,大家见谅了..但是必须用上边的形式.
读写文件应该没错,问题是:!!当我在edit conrol控件中输入1~4个汉字时,程序都正常.但是输入很多汉字时,就会出现 
Debug assertion failed!
Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse);怎么解决呢?最让我郁闷的是输入4个汉字就正常..5个汉字就出错了..

解决方案 »

  1.   

    string.c_str()获取其中的字符串数据成员指针
    你的CString中本来是不是unicode 如果是就没有必要(const   wchar_t*) 
    不然就直接赋值给str可以
    改成(LPCTSTR)m_content
      

  2.   

    用Std::string进行写是不明智的,可以直接同CString::GetBuffer()的内容进行写入
      

  3.   

    sizeof(string)?????????
    sizeof(string)返回的是固定的值,4.......
      

  4.   


    void CTestControlDlg::OnBnClickedOk()
    {
    // TODO: 在此添加控件通知处理程序代码
    CString sText, sFileName;
    sFileName = "D:\\test.txt";
    m_Text.GetWindowText( sText); char * pString = new char[ sText.GetLength() + 1]; if ( WriteStringToFile( sFileName, sText) )
    if ( ReadStringToFile( sFileName, &pString))
    SetDlgItemText( IDC_SHOWTEXT, pString);
    //OnOK();
    }BOOL CTestControlDlg::WriteStringToFile(const char * pFileName, const char * pString)
    {
    CFile File;
    if ( File.Open( "D:\\test.txt", CFile::modeCreate | CFile::modeWrite))
    {
    File.Write( pString, strlen( pString) + 1);
    File.Close();

    return TRUE;
    } return FALSE;
    }BOOL CTestControlDlg::ReadStringToFile(const char * pFileName, char ** ppString)
    {
    CFile File;
    if ( File.Open( pFileName, CFile::modeRead))
    {
    if( File.Read( *ppString, strlen( *ppString) ) )
    {
    File.Close(); return TRUE;
    }
    }

    return FALSE;
    }
      

  5.   

    首先,非常感谢大家的回答。。dirdirdir3和fandh(好了)的回答让我有所顿悟。。
    如果我自己定义了一个类  
      class Node 
    {
    //省略
    private:
    string name;
    string num;
    string sex;
    }
    那当我把Node写入文件时.
    Node people;
    ofstream   f( "data.dat ",ios::binary); 
     f.write((char   *)&people,sizeof(Node));是怎么写的 ??sizeof(Node)怎么计算?
    string类的数据是怎么写进文件中的?每次的string类的数据长度不一,sizeof(string)却又是固定值。。我有点困惑了~希望大家再帮帮我。。感激不尽