簡體   English   中英

將一個chars數組轉換為std :: string,以便傳入std :: bitset seg fault

[英]Converting an array of chars to std::string in order to pass into std::bitset seg fault

在你投票之前請仔細閱讀,確實有趣。 基本上我想將一個類型的char數組轉換為std::string以便使用std::bitset操作,但是當我嘗試在運行時創建bitset對象時,我得到了這個錯誤。

在拋出'std :: invalid_argument'的實例后調用終止what():bitset :: _ M_copy_from_ptr Aborted(core dumped)

這是代碼

#include <iostream>
#include <cstdlib>
#include <bitset>

int main()
{
    char BYTE_4[4] = { 1, 0, 0, 0};

    std::string str_BYTE_4 = std::string(BYTE_4);

    std::bitset<32> str_BYTE_4_bit( str_BYTE_4);//crash here
    std::cout<<"str_BYTE_4_bit. "<<str_BYTE_4_bit<<std::endl;

    return 0;
}

我還嘗試了一些其他類型的轉換與std::stringstream和指向charstd::string指針,無論我傳入std::bitset構造函數我得到相同的錯誤?

這些只是我注釋掉並從上面的代碼中刪除的片段,以顯示我嘗試過的內容。

//char* BYTE_4 = new char[4];
    //std::stringstream SS;

    //std::string str_BYTE_4 = "0101";
    //SS << BYTE_4;
        //str_BYTE_4 = SS.str();
    //for(int index = 0; index < 4; index++)
        //    str_BYTE_4 += BYTE_4[index];

    //std::string *str_BYTE_4 = new std::string[4];
    //for( int index = 0; index < 4; index++)
        //    BYTE_4[index] = rand()%255;

這是錯的:

char BYTE_4[4] = { 1, 0, 0, 0};
std::string str_BYTE_4 = std::string(BYTE_4);

你需要的是一串數字,但你要存儲原始字節10 (不是ASCII“1”和“0”)。 修復如下:

char BYTE_4[4] = { '1', '0', '0', '0'};
std::string str_BYTE_4 = std::string(BYTE_4, sizeof(BYTE_4));

由於沒有null終止符,您必須告訴std::string構造函數停止的位置(通過傳遞4作為第二個參數)。

更簡單的方法是:

std::string str_BYTE_4 = "1000";

至於你得到的invalid_argument異常,你會看到你是否閱讀了bitset的文檔,這意味着你傳遞的字符串包含既不是'0'也不是'1'字符(那些是ASCII字符,其原始整數值是48和49)。

從...構造的std::string

char BYTE_4[4] = { 1, 0, 0, 0};

與構造的std::string沒有什么不同

char BYTE_4[4] = { 1, '\0', '\0', '\0'};

您只有std:string由整數值1表示的char 這是問題的根源。

為了能夠從std::string構造std::bitset ,您需要std::string只包含字符'1''0' 因此,您需要使用字符'1''0' ,而不是整數值10

您可以使用:

char BYTE_4[] = {'1', '0', '0', '0', '\0'};
std::string str_BYTE_4 = std::string(BYTE_4);

要么

char BYTE_4[4] = {'1', '0', '0', '0'};
std::string str_BYTE_4 = std::string(BYTE_4, 4);

為了能夠從std::string構造一個std::bitset

物有所值:

std::bitset<32> str_BYTE_4_bit(std::string());

創建一個bitset其值由32個零位組成。

std::bitset<32> str_BYTE_4_bit(std::string("1000"));

創建一個bitset其值由28個前導位組成,這些位為零,后4位為1000。

暫無
暫無

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

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