关于Cstring中GetBuffer函数接受数据库返回字符串的有关问题

关于Cstring中GetBuffer函数接受数据库返回字符串的问题!
先看一下下面的程序

  CString   check_str,key
  otl_stream   i(   100,   "select   checkid,checkkey   from   lchecktab   where       uuid   =:id <int> ",   db,   otl_implicit_select);//从数据库dllchecktab表中得到checkid,checkkey  
    i < <id;//uuid   =id
    while(   !i.eof())
    i   > >   check_str.GetBuffer(1)   > >   key.GetBuffer(0);
此时check_str和key都是我想的到的字符串,
但在后面的程序中,当我   定义一个std::ifstream   f;时报“内存分配访问无效”的错误。
如果将   i   > >   check_str.GetBuffer(1)   > >   key.GetBuffer(0);
改成i   > >   check_str.GetBuffer(0)   > >   key.GetBuffer(0);
check_str和key都得到数据库中checkkey   的值,但对std::ifstream   f;定义和使用都没问题。
如果将CString   check_str,key
改成char   check_str[100],key[100],数据接收改为i   > >   check_str   > >   key;
这样就都没问题了。
check_str.GetBuffer(1)和std::ifstream   f;的定义到底有什么冲突呢?如果非要使用   CString   check_str,key接受数据字符串,该做如何处理呢?

------解决方案--------------------
你这样做也是不对的,CString::GetBuffer()是一个分配数组大小的函数,当你修改了CString的内容时,必须调用CString::ReleaseBuffer(-1).当然用GetBuffer(0)也可以,但是要确定修改后的字符串长度要小于等于原来的字符串长度,如原来CString长度为10,现在修改后的字符串和度为20,则必须调用GetBuffer(20),当然参数大于20也可以,如GetBuffer(25),修改后一定要记得调用ReleaseBuffer();
正确的做法是:
i > > check_str.GetBuffer(100) > > key.GetBuffer(100);
check_str.ReleaseBuffer();
key.ReleaseBuffer();

这样就OK了.