用str(const char *)设置std :: stringstream的内容会产生奇怪的结果

Troels Blum

std::stringstream广泛使用生成代码。str()使用函数设置内容并使用时我遇到了一些可笑的行为operator<<有人可以向我解释这种行为。我将非常感谢-谢谢。

范例一:

std::stringstream ssa;
ssa.str("Setting string");
std::cout << ssa.str() << std::endl;
ssa << " adding to string";
std::cout << ssa.str() << std::endl;

输出:

设定字串

添加到字符串

预期:

设定字串

设置字符串添加到字符串

因此,在阅读了一些文档之后,我发现应该将打开模式设置为ios_base::ate

std::stringstream ssb(std::ios_base::ate);
ssb.str("Setting string");
std::cout << ssb.str() << std::endl;
ssb << " adding to string";
std::cout << ssb.str() << std::endl;

输出:

设定字串

设定字串

再次(或现在),我期望:

设定字串

设置字符串添加到字符串

为什么我得到自己的结果,以及如何得到自己想要的结果?EI能够设置初始stringstringstream和附加到string

我知道我可以将内容设置为空string(""),然后仅使用<<operator实际上,这是我正在使用的解决方法。我只是不了解所观察到的行为。解决方法使我的代码更加混乱。

安德烈亚斯(Andreas DM)

您忘记设置标记模式:std::ios_base::out这将起作用:

std::stringstream ssb(std::ios_base::out | std::ios_base::ate);
ssb.str("Setting string");
std::cout << ssb.str() << std::endl;
ssb << " adding to string";
std::cout << ssb.str() << std::endl;

输出:

Setting string
Setting string adding to string

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

std :: string.assign(const char *)或op =(带有const char *)会创建char *的副本吗?

用const char *初始化std :: string会导致乱码

std :: stringstream返回char *

带有const char *的奇怪std :: cout行为*

std :: string :: compare(const char *)会抛出异常吗?

如何使用inst const char *作为std :: string内容

std :: string和const char *

修改char * str的内容

将const char **转换为std :: vector <const char *>

如何将std :: string转换为const char *或char *?

_alloca 和 std::vector of const char*

std :: to_string存储在const char *中

内联替换std :: stringstream中的char

使用Visual Studio 2013直接从std :: ostringstream获取const char *时出现意外结果

(const char *)++或(const char)++?

用const char * const解释constexpr

std :: string强制转换为const char *在std :: unordered_set <const char *>中找不到

在std :: __ cxx11 :: basic_string <char,std :: char_traits <char>,...,std :: allocator <char>> const&)中获取未知的分段错误“(地址)const()const()

const char *不能用作std :: char_traits <char> :: length的常量值

为什么用char *替换char []会产生总线错误?

应对const char *类型变量的内容导致意外结果

在C中使用char / string指针会产生奇怪的输出

未定义引用`cv :: error(int,std :: string const&,char const *,char const *,int)'

以简单的方式修改 const char * vs char * 内容

将 char* 转换为 str 奇怪的输出

为什么以不同顺序使用std :: remove_reference和std :: remove_const会产生不同的结果?

创建 std::tuple 时从 const char* 或 char* 推导出 std::string

const char **和char **

检查 std::vector<const char *> 是否包含作为 const char * 给出的字符序列