C++ ostringstream和ends
我一直在使用其他人的代码,并注意到在OstringTeam的所有使用中,他们都习惯于显式地附加C++ ostringstream和ends,c++,string,stream,C++,String,Stream,我一直在使用其他人的代码,并注意到在OstringTeam的所有使用中,他们都习惯于显式地附加std::ends 这是我从未做过的事情,也从未遇到过问题 它似乎没有,但是std::ends是否应该对以下代码产生任何影响 ostringstream message; message << "Hello world, version " << 2 /* << std::ends ??? */; printf( "%s\n", message.str().c_str
std::ends
这是我从未做过的事情,也从未遇到过问题
它似乎没有,但是std::ends
是否应该对以下代码产生任何影响
ostringstream message;
message << "Hello world, version " << 2 /* << std::ends ??? */;
printf( "%s\n", message.str().c_str() );
ostringstream消息;
消息追加std::ends
在这里毫无意义,因为stringstream
的c_str
返回以null结尾的char*
。对于(现在已弃用的)strstream
s,情况并非如此,其中需要附加std::ends
。我相信作者根本不知道这种改变的行为。它不应该,c_str()
返回以NUL结尾的字符串。+1回答得好。对于stringstream,有些情况下,结束
是有用的:尽管上面的链接中结束是有用的,但是如果在没有预期的情况下添加“额外”字符,它们可能是危险的。我的同事想知道为什么他的stringstream构造的字符串与数据库中的字符串不完全相同,这是因为它有一个嵌入的\0字符。他是否有可能键入了std::endl
?@litb-不,我认为目的肯定是结束,而且多次出现您的printf错误,它缺少一个格式字符串。@Brian Neal很好。就像我不再在正确的代码中使用printf一样。。。