这段代码的意思是用ostringstream存储一个string,它的内容可能来自文本,本例中是这样的
val1: 512/nval2: 1024
然后打算把它输出,用意是取出512和1024这两个数值。具体的作法是用format_message.str()取出string类型的值然后用它来构造一个istringstream,再由这个istringstream输入到val1和val2中(其过程是交换了这两个值),使它们获得新的值。
【问题描述】
发现dump里的值是val1:512,而val1和val2的值并没有交换
【分析过程】
设置断点后debug,发现dump第一次读取的值就是val1:512,这说明istringstream并没有把val1和512区分开来。
考虑istringstream区分string的标记大致有 空格、回车、制表 等,再看我的程序
format_message << "va1:" << val1 << "/n" 。。。。。。。
这里的 "va1:" 没有空格
【修改】
format_message << "va1: " << val1 << "/n" << "val2: " << val2 << "/n";
【思考】
这样看来dump第一次接收的值是val1:512,然后val1接收val2: 1024,此时由于类型不是匹配,接收失败,接下来dump和val2都没有可以接收的内容,所以val1和val2的值并没有交换
本文深入解析了一段C++代码,详细解释了如何使用`ostringstream`存储字符串,通过`istringstream`实现内存交换及数据读取的过程,并揭示了其中的陷阱与修正方法。着重探讨了字符串解析中的细节,包括如何正确使用分隔符,以及在数据输入与输出过程中可能出现的错误。通过案例分析,读者将掌握更高效、准确的数据处理技巧。
1496

被折叠的 条评论
为什么被折叠?



