簡體   English   中英

如何將char *轉換為字符串?

[英]How to convert a char* to a string?

當我將char *轉換為字符串時,它在'new.cpp'中給出了錯誤的內存分配錯誤。 我使用以下方法將名為“ strData”和“ strOrg”的char *轉換為字符串。

   const char* strData = dt.data();
   int length2 = dt.length();
   string s1(strData);

第一次可以正常工作。 但是在第二次轉換中,它給出了以上錯誤。 當我按順序交換兩個轉換時,無論我要轉換的char *是什么,它總是在第二個轉換中給出錯誤。 整個代碼如下所示。

    mysqlpp::Query query = conn.query("SELECT data,origin from image where id =2");
    mysqlpp::UseQueryResult res = query.use();
    mysqlpp::Row eee= res.fetch_row();
    mysqlpp::Row::reference dt = eee.at(0);
    mysqlpp::Row::reference org = eee.at(1);

    const char* strData = dt.data();
    int length2 = dt.length();
    string s1(strData);
    istringstream is1(s1);  
    char * imgData =  new char;
    is1.read(reinterpret_cast<char *> (imgData), length2);
    delete [] strData;

    const char* strOrg = org.data();
    int length3 = org.length();
    string s2(strOrg);
    istringstream is2(s2);  
    char * imgOrg =  new char;
    is2.read(reinterpret_cast<char *> (imgOrg), length3);
    delete [] strOrg;

這是錯誤的來源

    void *__CRTDECL operator new(size_t size) _THROW1(_STD bad_alloc)
    {       
    void *p;
    while ((p = malloc(size)) == 0)
            if (_callnewh(size) == 0)
            {       // report no memory
            static const std::bad_alloc nomem;
            _RAISE(nomem);
            }

    return (p);
    }

我該如何解決?

代替

char * imgData = new char;
is1.read(reinterpret_cast<char *> (imgData), length2);

嘗試

char * imgData = new char[length2];
is1.read(reinterpret_cast<char *> (imgData), length2);

使用readistringstream讀取數據時,提供的緩沖區必須有足夠的空間來保存結果!

如果您調用new char; 你有一個char空間。 使用new char[n]; 獲得n的空間




    delete [] strData;

這不好。 它上面的線可能也是,但我知道這是。

您正在刪除dt.data()。 如果我沒記錯的話,那肯定是字符串的內部緩沖區。

就像我說的那樣,這可能不是您的根本問題,我懷疑它上面的行也是不好的,因為您傳遞了一個指向單個字符的指針,該指針似乎可以期待一定長度的緩沖區。

我認為問題(或至少部分問題)與您的分配有關:

char * imgData =  new char;

這只會分配1個char,然后istream.read將假定imgData是chars(注意復數)的緩沖區,並將其讀取的內容放入您分配的單個char中,然后將超出的內容放入誰知道的內存中。

結果通常稱為“未定義的行為”-有時您會像第一個實例那樣擺脫它,而其他時候則不會,就像第二個轉換一樣。

暫無
暫無

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

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