请按如下步骤写一个函数,以'\0'拆分一个Buffer,将拆分出的字符串放入一个字符串队列:
要求用MFC  vector<string> CStringArray
typedef1 声明并实现一个空函数:void SplitBufferByZero(LPCTSTR lpBuf, int nBufLen, CStringArray &szaDst)
2 假设此函数已经完成,编写一个测试方法以测试此函数
3 实现此函数void SplitBufferByZero(LPCTSTR lpBuf, int nBufLen, CStringArray &szaDst)
4 用已经写好的测试方法测试此函数上面这题是什么意思啊???求解答 最好能给出代码

解决方案 »

  1.   

    意思就是一块存储区(BUFFER)中有若干个字符串,现在要通过SplitBufferByZero这个函数将这些字符串解析出来,并存入一个CStringArray对象中去.
      

  2.   

    void SplitBufferByZero(LPCTSTR lpBuf, int nBufLen, CStringArray &szaDst)
    {
    int nLen = 0;
    for (; nLen <= nBufLen; )
    {
    CString strTmp(lpBuf + nLen); 
    szaDst.Add(strTmp);
    nLen = _tcslen(lpBuf + nLen) + 1;
    }
    }
      

  3.   

    题目是这个意思:内存中有这样的字符串"\0\0123\0\0456\0\0  用‘\0“分割字符串,把 123和456 拿出来放到szaDst中  代码怎么写呢?
      

  4.   

    题目是这样的::
    1 声明并实现一个空函数:void SplitBufferByZero(LPCTSTR lpBuf, int nBufLen, CStringArray &szaDst)
    2 假设此函数已经完成,编写一个测试方法以测试此函数
    3 实现此函数void SplitBufferByZero(LPCTSTR lpBuf, int nBufLen, CStringArray &szaDst)
    4 用已经写好的测试方法测试此函数
      

  5.   

     vector<string> CStringArray你确定是string而不是 vector<cstring> CStringArray
      

  6.   

    vector<string> CStringArray;
    CStringArray szaDst;void SplitBufferByZero(LPCTSTR lpBuf, int nBufLen, CStringArray &szaDst)
    {
    int nLen = 0;
    for (; nLen <= nBufLen; )
    {
    CString strTmp(lpBuf + nLen);  
    szaDst.push_back(strTmp);
    nLen = _tcslen(lpBuf + nLen) + 1;
    }
    }建议楼主命名好点,vector<string> CStringArray;这样会误解的
      

  7.   

    题目写错了 
    请按如下步骤写一个函数,以'\0'拆分一个Buffer,将拆分出的字符串放入一个字符串队列:1 声明并实现一个空函数:void SplitBufferByZero(LPCTSTR lpBuf, int nBufLen, CStringArray &szaDst)
    2 假设此函数已经完成,编写一个测试方法以测试此函数
    3 实现此函数void SplitBufferByZero(LPCTSTR lpBuf, int nBufLen, CStringArray &szaDst)
    4 用已经写好的测试方法测试此函数
      

  8.   


    void SplitBufferByZero(LPCTSTR lpBuf, int nBufLen, CStringArray &szaDst)
    {
    int pos = 0, len = 0;
    TCHAR c = '\0';
    string str = _T("");
    if(nBufLen <= 0)
    return;
    while(pos = (lpBuf->find(c,pos)))//查找'\0'
    {
    len = pos -len;
    str.copy(lpBuf,len,pos);//拷贝从pos开始的len长度str
    szaDst.push_back(str);//放入CStringArray
    }}
      

  9.   

    楼上的朋友你好 如果是这种情况 “\0\0\0123\0\0456” pos = (lpBuf->find(c,pos)在首位就不行了吧
      

  10.   

    2楼曲解了题目的意思 是我的过错
    hacker1125 理解对了 但是不严谨 能再改善下吗 谢谢 
      

  11.   

    CObject 
     └CStringArray 
    CStringArray类支持CString对象数组。
    CStringArray的成员函数类似于CObArray类的成员函数
      

  12.   

    那就是空串不要呗?void SplitBufferByZero(LPCTSTR lpBuf, int nBufLen, CStringArray &szaDst)
    {
    int nLen = 0;
    for (; nLen <= nBufLen; )
    {
    CString strTmp(lpBuf + nLen);  
    if(strTmp.GetLength() > 0)
    szaDst.Add(strTmp);
    nLen = _tcslen(lpBuf + nLen) + 1;
    }
    }
      

  13.   


    void SplitBufferByZero(LPCTSTR lpBuf, int nBufLen, CStringArray &szaDst)
    {
        int pos = 0, len = 0;
        TCHAR c =L"\0";
        Cstring str = _T("");
        if(nBufLen <= 0)
            return;
        while(lpBuf->find(c,pos)!=-1)//查找'\0'
        {
            len = pos -len;
            if(!len)
            {pos++;
             continue;
            }
           memcpy(str,lpBuf+pos,len);
            szaDst.push_back(str);//放入CStringArray
        }}
      

  14.   

    改下
    while(lpBuf->find(c,pos)!=-1)//查找'\0'
      {
       if(lpBuf->find(c,pos)==pos)
       {
         pos++;
         len=pos;
        continue;
       }
       len = pos -len;
       memcpy(str,lpBuf+pos,len);
       len=pos;
      szaDst.push_back(str);//放入CStringArray
      

  15.   

    17L 那要是\0\0\0oldn_CC_bird\0\0\0123456呢 我要saDst[0] = "0oldn_CC_bird"
    saDst[1] = "123456" 你那种方法把0oldn_CC_bird123456
    放一起了
      

  16.   

    刚测试了下我的代码,是有问题。
    不用能_tcscpy来处理这个buffer.
    原因找了好半天...
    主要是前面的\0是\0,后面的的\0123456,这里的取的是\012来转意的.所以自然就有问题了。
    还有长度的累加也有问题。唉,几行代码这么多bug,惭愧啊..
      

  17.   

    这个不就是分割字符串吗??
    CString strText(_T("\\0\\0\\012345\\0\\0"));
    CString strToken(_T(""));
    int curPos = 0;
    LPCTSTR szToken(_T("\\0"));
    while(_T("") != (strToken = strText.Tokenize(szToken, curPos)))
    {
    if(!strToken.IsEmpty())
    AfxMessageBox(strToken);
    }