首先,我知道ostrstream被弃用了,但是在这种情况下重构为ostringstream并不是一个真正的选择。
目前,我只是检查流是否在<<
操作后设置了坏位:
示例(是的,非常简化):
char* buf = new char[10];
std::ostrstream tempOut(buf, 10);
tempOut << "To many charactors to fit in the buffer";
if (tempOut.bad()) {
// Do what needs to be done to allocate a bigger buf
}
是否有更好的方法来检查并确保坏状态是由于溢出而不是其他问题?
是否有更好的方法来检查并确保坏状态是由于溢出而不是其他问题?
调用exceptions()方法来设置将抛出哪些异常。这是c++处理错误的正确方式。你必须在知道如何解决错误的地方处理异常。
那么,我将这样做:
char* buf = new char[10];
std::ostrstream tempOut(buf, 10);
tempOut.exceptions(std::ios::badbit);
try
{
tempOut << "To many charactors to fit in the buffer";
}
catch( const std::exception & e )
{
//resolve error
}
是否有更好的方法来检查并确保坏状态是由于溢出而不是其他问题?
不,不完全是。您必须知道哪个操作会导致哪个错误,并处理它。异常的好处是
- 你不能忽略它们。
- 您不必在错误发生的地方处理错误。