Проблема потери данных при преобразовании строки из std::string в const char *

В этой функции, проходя string в качестве аргумента (который имеет огромное количество данных в виде строки)...

Метод SendBytes определяется следующим образом

bool NetOutputBuffer_c::SendBytes ( const void * pBuf, int iLen )
{
        BYTE * pMy = (BYTE*)pBuf;

        while ( iLen>0 && !m_bError )
        {
                int iLeft = m_iBufferSize - ( m_pBufferPtr-m_pBuffer );
                if ( iLen<=iLeft )
                {
                        printf("iLen is %d\n",iLen);
                        memcpy ( m_pBufferPtr, pMy, iLen );
                        m_pBufferPtr += iLen;
                        break;
                }

                ResizeIf ( iLen );
        }
        return !m_bError;
}

bool NetOutputBuffer_c::SendCompressedString ( std::string sStr )
{
    std::cout << sStr << endl;
    const char *cStr = sStr.c_str();
    std::cout << cStr <<endl;

    int iLen = cStr ? strlen(cStr) : 0;
    SendInt ( iLen );
    return SendBytes ( cStr, iLen );
}

Пробовал печатать значение sStr, чтобы проверить, есть ли у него правильные данные или нет.

Затем преобразование std::string в const char *

После преобразования попытался распечатать значение cStr. Но он (cStr) на самом деле содержит 5% фактических данных (sStr)...

что мне нужно сделать, чтобы получить все данные?

Может ли кто-нибудь направить меня в этом отношении?

1 ответ

strlen работает для с-струн. То есть строки с нулевым символом в конце. Он ищет '\0' символа и возвращает позицию этого символа в качестве длины строки. Вы сжали двоичные данные, а не к-строку. Он почти наверняка содержит 0 перед концом строки. использование sStr.size() вместо.

SendInt ( sStr.size() );
return SendBytes ( sStr.c_str(), sStr.size() );
Другие вопросы по тегам