2015-07-20 53 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