2015-07-20 52 views
0

以下是功能和呼叫線路。我有一個char sKey。如果在IDE中,如果在將它轉換爲字符串後檢查tmpstring,它會顯示我期望的值「E2247410849FA3」。但是,當我查看日誌文件,我得到「003BFA34」我想讓它顯示722 ....我做錯了什麼?將字符串追加到日誌文件

void logit(const std::string& ctext) 
{ 
    std::ofstream outfile; 
    outfile.open("c:\\hex.log", std::ios_base::app | std::ios_base::out); 
    outfile << &ctext <<endl; 
} 

tmpstring = std::string(sKey,14); 
logit(tmpstring); 
+0

嘗試運行模式中的ide一次, – 2015-07-20 16:32:13

+0

您應該通過常量引用而不是按值傳遞'ctext'。 'const std :: string&ctext'。 –

+0

謝謝。我做了修改,但它仍然沒有影響文件內的結果。這次結果是0037FC0C。 – iBoston

回答

2

您必須追加設置是否正確,但你的代碼存在一個致命缺陷:

正在打印的字符串,而不是實際的字符串的memroy地址。

爲了糾正這一點,只是普林的ctext代替&ctext

void logit(std::string ctext) 
{ 
    std::ofstream outfile; 
    outfile.open("c:\\hex.log", std::ios_base::app | std::ios_base::out); 
    outfile << ctext <<endl; 
    //  ^no & 
} 

在一個完全無關的性能要注意,在probally以const REF通過。

+0

謝謝。但是 - 如果我刪除,我然後得到以下錯誤:錯誤錯誤C2679:二進制'<<':沒有找到操作符,它需要類型'const std :: string'的右側操作數(或有沒有可接受的轉換) – iBoston

+0

請確保您擁有所有權利,包括 – KABoissonneault

+0

發現問題。不包括#include iBoston