печать — программа вылетает при использовании функции sprintf () (std :: cout работает нормально)

Я подключаю свою программу по сети, используя RakNet, и я хочу получить сетевую статистику во время выполнения. К счастью, RakNet имеет две встроенные функции для этого. GetStatistics () а также StatisticsToString (). Тем не менее, программа вылетает, когда я вызываю StatisticsToString() функция (StatisticsToString просто должен преобразовать статистические данные в строку, используя функцию sprintf), и я абсолютно не знаю, почему … без ошибок … ничего. Я изменил исходный код функции и заменил sprintf() функция с std::cout и программа работала нормально, как и предполагалось.

Моя пользовательская функция для записи статистики:

void HavNetProfiler::WriteStats(RakNet::RakPeerInterface *peer)
{

if (RakNet::GetTimeMS() > nextStatTime)
{
nextStatTime = RakNet::GetTimeMS() + 1000;
RakNet::RakNetStatistics rns;
char *text;

peer->GetStatistics(peer->GetSystemAddressFromIndex(0), &rns);
RakNet::StatisticsToString(&rns, text, 0);
//printf("%s\n\n", text);
}

Фрагмент исходного кода из функции StatisticsToString ():

void RAK_DLL_EXPORT RakNet::StatisticsToString( RakNetStatistics *s, char *buffer, int verbosityLevel )
{
if ( s == 0 )
{
sprintf( buffer, "stats is a NULL pointer in statsToString\n" );
return ;
}

if (verbosityLevel==0)
{
sprintf(buffer,
"Bytes per second sent     %" PRINTF_64_BIT_MODIFIER "u\n""Bytes per second received %" PRINTF_64_BIT_MODIFIER "u\n""Current packetloss        %.1f%%\n",
(long long unsigned int) s->valueOverLastSecond[ACTUAL_BYTES_SENT],
(long long unsigned int) s->valueOverLastSecond[ACTUAL_BYTES_RECEIVED],
s->packetlossLastSecond*100.0f
);

//Modified std::cout solution
/*std::cout << "\nB/s sent: " << (long long unsigned int) s->valueOverLastSecond[ACTUAL_BYTES_SENT]
<< "\nB/s recieved: " << (long long unsigned int) s->valueOverLastSecond[ACTUAL_BYTES_RECEIVED]
<< "\nCurrent packetloss: " << s->packetlossLastSecond*100.0f << "\n"<< std::flush;*/
}

std::cout Решение должно быть временным, так как мне не нужно редактировать исходный код RakNet. Мне просто нужна ваша помощь, чтобы выяснить, почему sprintf не может работать как задумано. Я довольно новичок в C ++, поэтому, может быть, мне здесь не хватает чего-то действительно очевидного. Я не знаю…

Спасибо!

0

Решение

sprintf(buffer,...) где buffer должно быть достаточно большим, чтобы содержать полученную строку.

Вам нужно что-то вроде:

char text[1000];
RakNet::StatisticsToString(&rns, text, 0);
2

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

Других решений пока нет …

По вопросам рекламы [email protected]