[英]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);
使用read
從istringstream
讀取數據時,提供的緩沖區必須有足夠的空間來保存結果!
如果您調用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.