Проблема потери данных при преобразовании строки из 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) …

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

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

0

Решение

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

SendInt ( sStr.size() );
return SendBytes ( sStr.c_str(), sStr.size() );
4

Другие решения