2015-02-23 75 views
-2

在這個例子中缺失,數據去變換爲const char *時的std :: string

*剛給予爲const char *值作爲輸入(即::試驗之一)

*轉換爲const char *到的std :: string

*通過的std :: string的值來壓縮串

*字符串,壓縮,可以看到壓縮字符串的值

*如::壓縮字符串:: X + I-.QKo#

*現在轉換的std :: string的壓縮數據爲const char * ...

*當我'在這一步中,只有75%的data.few數據丟失了。

例如:: X + I-.QK

*應我需要做的序,以獲得完整的數據是什麼?

*有人可以在這方面幫助我嗎?

 int main (int argc,char *argv[]) 

    { 

     const char *str = "test one"; 
     int length = 0; 

     std::string compressionString(str);//converting char * to std::string 
     cout << "compressionString::" << compressionString<< endl; 

     while(*(str+length)) 
     length++; //length of char * 

     cout << "Length of entered string:: " <<length << endl; 

     std::string compStr = compress_string(compressionString);//Compress the string using compress_string() 

     cout << "compressed String::"<<compStr << endl; 

     const char* m_pcompCharptr = compStr.c_str(); 

     cout << "Compressed string char* length::"<< sizeof(m_pcompCharptr) <<endl; 
     cout << "Compressed value which is present in char * is :: " <<m_pcompCharptr << endl; 

     cout << "Compressed String length:: " << compStr.length() << endl; 
     int iCompLen = compStr.length(); 

     cout << "iCompLen::" << iCompLen << endl; 

     std::string decompressionString(m_pcompCharptr);//converting const char* to std::string 

     std::string decompStr = decompress_string(decompressionString); 

     cout << "decompStr::" << decompStr << endl; 
     return 0; 
} 

輸出::

輸入的字符串:: 8

壓縮字符串:: X + I-.QKo#

的compressionString ::測試一個

長度

壓縮字符串char * levgth :: 8

壓縮值存在於ch AR *是:: X + I-.QK

壓縮字符串長度:: 16

iCompLen :: 16

終止稱爲投擲的實例後 '的std :: runtime_error' 什麼():zlib的解壓縮過程中的異常:(-5) 中止(核心轉儲)

+0

我不會把一個字符串中的壓縮字符串。特別是因爲它可能不再被視爲一個字符串。 – 2015-02-23 10:21:15

+3

我猜測在壓縮字符串中有一個空字節。如果在倒數第四行中使用'std :: string decompressionString(m_pcompCharptr,compStr.size());'它會起作用嗎? – Wintermute 2015-02-23 10:21:22

+1

這個問題對我來說非常難以理解。請使用完整句子並改進格式以清楚地標記代碼片段等。 – 2015-02-23 10:21:47

回答

0

當你做到這一點...

const char* m_pcompCharptr = compStr.c_str(); 

.. 。您得到const char*的第一個字符compStr,它本身沒有概念或長度/大小的記錄。然後,如果您使用構造從上面的const char*串...

std::string decompressionString(m_pcompCharptr); 

std::string構造對const char*超載依靠ASCIIZ編碼來檢測輸入字符串的長度:這意味着它認爲在完成文本第一個NUL角色。

這不是一個錯誤...與二進制字符串打交道時,你真的需要,以重建string像這樣保留兩個從.size()一個const char*size_t值(你在length有效捕獲):

std::string decompressionString(m_pcompCharptr, length); 
相關問題