这是我的功能:
string GaugeStr;
void someFunction() {
float pie = someFloat();
stringstream ss (stringstream::in | stringstream::out);
ss << pie;
GaugeStr = ss.str();
}
当我运行该函数时,它可以正常工作。但是,当我第二次调用它时 (someFunction(); someFunction();
,然后我的程序因段错误而崩溃。
我尝试将 stringstream ss (stringstream::in | stringstream::out);
放在函数之外,使其成为一个全局变量,但我想将内容发送到 GaugeStr
附加到 ss
。例如,如果我们假设 someFloat()
总是返回 1.2,那么我第二次运行该函数时,GaugeStr
设置为 1.21.2
.
因此,我在函数中插入了 ss.str("")
,但程序再次崩溃并出现段错误。
如何将 someFloat()
的值 GaugeStr
作为没有段错误的字符串?
精确函数
void CPU_BenchmarkFrame::OnButton1Click(wxCommandEvent& event) {
float pie = PiAlgo (Gauge2);
stringstream ss (stringstream::in | stringstream::out);
ss << pie;
wxMessageBox(_("Alert"), _("Sample Alert")); //To test where the segfault happens
string GaugeStr = ss.str();
wstring GaugeWid;
std::copy(GaugeStr.begin(), GaugeStr.end(), GaugeWid.begin());
StaticText2->SetLabel(GaugeWid);
}
更多编辑
问题是这里的一行或多行:
wstring GaugeWid;
std::copy(GaugeStr.begin(), GaugeStr.end(), GaugeWid.begin());
StaticText2->SetLabel(GaugeWid);
当我评论它们时,脚本正常工作。
最佳答案
这行不通
std::wstring GaugeWid;
std::copy(GaugeStr.begin(), GaugeStr.end(), GaugeWid.begin());
当 GaugeWid
没有大小时。而且它也不转换字符。
如果你想要一个宽字符串,使用一个wstringstream
。
关于c++ - 字符串流的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6581293/