在ostringstream上传递[英] Passing on ostringstream

问题描述

你好,

我的 c++ 程序看起来像这样

无效 api1() {
cin <<信息;
ostringstream ostr;
ostr <<信息;
api2(ostr.str().c_str());//从 ostreamstream 和
中获取字符串从字符串中获取 char*
}

void api2(const char* ch) {
插入地图(ch);
}

api2"a"的样本输入之后当我检查地图的内容时
在最后.我看到一些垃圾值.

有人可以解释我的程序出了什么问题吗?我应该
不在 ostringstream 上执行 c_str()?.

谢谢,
Suresh

推荐答案

vs********@gmail.com 写道:
你好,

我的 c++ 程序看起来像这样

无效 api1() {
cin <<信息;
ostringstream ostr;
ostr <<信息;
api2(ostr.str().c_str());//从 ostreamstream 和
中获取字符串从字符串中获取 char*
}

void api2(const char* ch) {
插入地图(ch);
}

api2"a"的样本输入之后当我检查地图的内容时
在最后.我看到一些垃圾值.

有人可以解释我的程序出了什么问题吗?我应该
不在 ostringstream 上执行 c_str()?
std::string.c_str() 的返回值指向
拥有的存储标准::字符串.一旦对象超出范围,指针就不再是
有效的.从 std::ostringstream.str() 返回的 std::string 对象去
在下一个序列点超出范围,函数调用结束,所以 if
您的 api2() 函数将该指针隐藏在某处,该指针将
一旦api2()返回就不再有效,调用者的函数调用是
完成.
-----开始PGP签名-----
版本:GnuPG v1.4.9 (GNU/Linux)

iEYEABECAAYFAkiAeoQACgkQx9p3GYHlUOLSWACdHrTzPjHMD3 tGn8CvQm7lQjL7
eUwAniynmx9HMFdHI/dpM5P+1KE5dzV/
=D03+
-----结束 PGP 签名-----


2008-07-18 12:58,vs********@gmail.com 写道:
你好,

我的 c++ 程序看起来像这样

无效 api1() {
cin <<信息;
ostringstream ostr;
ostr <<信息;
api2(ostr.str().c_str());//从 ostreamstream 和
中获取字符串从字符串中获取 char*
}

void api2(const char* ch) {
插入地图(ch);
^^^^^^^^^^^^^^^^^ 语法错误!
api2"a"的样本输入之后当我检查地图的内容时
在最后.我看到一些垃圾值.

有人可以解释我的程序出了什么问题吗?我应该
不在 ostringstream 上执行 c_str()?

我不能肯定地说,因为我不知道地图是什么或你如何插入
进入它(请参阅常见问题解答中的第 5.8 节).我猜你
在地图中插入 ch,因为 ch 是一个指向临时的指针(或 at
至少一个将在 api1()) 结束时被销毁的对象只
以后捡垃圾.

而不是使用 c_str() 来获取 cont char* 您应该使用 return-
来自 str() 的值作为映射中的键,使用 char 数组
除非你必须是坏的.

--
Erik Wikstr??m

嗨 Sam/Erick,

我正在详细写我的程序

std::map
无效 api1() {

cin <<钥匙;//字符串
cin <<价值;//整数
ostringstream ostr;
ostr <<钥匙;
api2(ostr.str().c_str(), value);

}

void api2(const char* info, int value) {
缓存[信息] = 值;
}

所以,这里我不是存储信息*,而是复制它的值
指向字符串的指针并将其保存在我的 MAP 中.
但是当我打印这个缓存时,它指的是垃圾值.

+suresh

本文地址:https://www.itbaoku.cn/post/1050741.html