簡體   English   中英

C ++-當我使用sprintf()函數時程序崩潰(std :: cout正常工作)

[英]C++ - Program crashes when I use sprintf() function (std::cout works fine)

我正在使用RakNet將程序聯網,我想在運行時獲取一些網絡統計信息。 幸運的是,RakNet為此具有兩個內置函數。 GetStatistics()StatisticsToString() 但是,當我調用StatisticsToString()函數(StatisticsToString僅應使用sprintf函數將統計數據轉換為字符串StatisticsToString()時,程序崩潰,而且我絕對不知道為什么...沒有錯誤...沒有。 我修改了該函數的源代碼,並用std::cout替換了sprintf()函數,該程序按預期工作正常。

我用於編寫統計信息的自定義函數:

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 ++相當陌生,所以也許我在這里遺漏了一些明顯的東西。 我不知道...

謝謝!

sprintf(buffer,...)其中buffer應該足夠大以包含結果字符串。

您需要類似:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM