字符串处理是以\0为结尾的,也就是说CString tt="abc\0def\0fhi";相当于 tt = "abc"而已

解决方案 »

  1.   

    void MFCDlg::GetExtraInfo(LPSTR extBuf, std::string& extInfo)
    {
    extInfo = "";
    bool bFirstNull = false;
    if(extBuf != NULL)
    {
    int iCnt = 0;
    while(true)
    {
    if(bFirstNull && extBuf[iCnt] == '\0')
    {
    break;
    }
    else if(extBuf[iCnt] == '\0')
    {
    bFirstNull = true;
    }
    else if(bFirstNull)
    {
    extInfo += "\r\n";
    extInfo.append(extBuf + iCnt, 1);
    bFirstNull = false;
    }
    else
    {
    extInfo.append(extBuf + iCnt, 1);
    }
    iCnt++;
    }
    }
    }学习一下人家的思路吧 不会就要谦虚
      

  2.   

    void MFCDlg::GetExtraInfo(LPSTR extBuf, std::string& extInfo)
    {
    extInfo = "";
    bool bFirstNull = false;
    if(extBuf != NULL)
    {
    int iCnt = 0;
    while(true)
    {
    if(bFirstNull && extBuf[iCnt] == '\0')
    {
    break;
    }
    else if(extBuf[iCnt] == '\0')
    {
    bFirstNull = true;
    }
    else if(bFirstNull)
    {
    extInfo += "\r\n";
    extInfo.append(extBuf + iCnt, 1);
    bFirstNull = false;
    }
    else
    {
    extInfo.append(extBuf + iCnt, 1);
    }
    iCnt++;
    }
    }
    }学习一下人家的思路吧 不会就要谦虚受不了啊,人家使用的的std::string,你提的问题及给出的代码是CString,这两个不一样啊
      

  3.   

    思路不是没有。这种简单的字符串操作思路谁不会啊,但我看这个例子也没解决最末尾 \0 的问题。替换 \0 为其他字符,这个没什么技术,关键点是你如何知道你的所有字符串到头。如果我来做,我觉得微软所使用的 Multi-String 方式挺不错的。TCHAR str[] = TEXT("abc\0def\0fhi\0");即用双 \0 结尾的方式,这是一种比较好的方式来标志所有字符串结束。你发的代码也是用了这种方式而已,即已经有 \0 再遇到 \0 就表示结束。只不过你根本没看到它如何传的参数,如果按你那样去写 "abc\0def\0fhi" 传递进入这个函数同样越界。
      

  4.   

    思路就别提了,没有标志所有字符串结束的标志,根本没办法解决你的问题。
    void function(LPSTR pszRet, LPCSTR pszSrc)
    {
        if (pszSrc != NULL && pszRet != NULL) {
            while (*pszSrc != 0) {
                while (*pszSrc != 0) {
                    *pszRet++ = *pszSrc++;
                }
                pszSrc++;
            }
            *pszRet = 0;
        }
    }int main(void)
    {
        char szSrc[] = "abc\0defg\0hijklmn\0";
        char szRet[256];
        function(szRet, szSrc);
        puts(szRet); // abcdefghijklmn
        return 0;
    }