C ++ Stringstream int to string但返回null

时间:2010-03-19 15:48:30

标签: c++ string int stringstream

下面是我的功能:

string Employee::get_print(void) {

   string out_string;
   stringstream ss;

   ss << e_id << " " << type << endl;
   out_string = ss.str();

   return out_string;
}

e_idtypeint,它们包含Employee类的值。但是当我将它们传递给字符串流时,他们只是在我尝试将其放入时清除字符串。但是,如果int中的ss << "Some text" << endl;此输出没有问题。我做错了什么= S

//修改

确定; 这是调用代码:

tmp = cur->get_print();

其中tmp是一个字符串,cur是一个Employee对象。

此代码......

stringstream out; 
out << "Test " << e_id << " " << e_type; 
return out.str(); 

重演“测试”而没有别的。如果我取出"Test " <<我的返回字符串是“”

我在Mac OS / X 10.6.2上使用GCC 4.2,如果这有任何区别的话。

5 个答案:

答案 0 :(得分:1)

我也无法重现此错误。如前所述,不要包含endl,因为它实际上附加了\n并且应该刷新写缓冲区。对于这种用途,它是完全没必要的,实际上可能导致不良结果......但是,编辑/更新中的代码对我来说效果很好。

int main(int argc, char* argv[])
{
   int e_id = 5;
   int e_type = 123456;
   stringstream out; 
   out << "Test " << e_id << " " << e_type;
   cout << out.str();
   return 0;
}

产地:

Test 5 123456

我的建议是仔细检查e_ide_type是否真的只是原生int

对于进一步测试,您可能希望强制对值进行强制转换以查看它是否有帮助:

out << "Test " << (int)e_id << " " << (int)e_type;

由于我无法重现此错误,我担心我无法继续提供帮助。但祝你好运!

答案 1 :(得分:1)

好的我不知道stringstream发生了什么事情我已经尝试在我的代码的其他部分使用它,它不适用于整数。因此,我已恢复使用sprintf C函数:

string Employee::get_print(void) {

   char out[50];

   sprintf(out, "%d %d", e_id, e_type);

   string output = out;

   return output;
} 

返回所需的字符串。

答案 2 :(得分:1)

我已经进入了Netbeans,我没有这个问题。所以这是Xcode的一个问题。

答案 3 :(得分:0)

我认为不需要endl。如果你想在std :: cout上的文件上写一个换行符,你只需要编写endl。

由于你编写了endl,你的stringstream将包含一个包含2行的字符串,其中第二行是空的。这可能会让你感到困惑。删除endl只获得一行。

答案 4 :(得分:0)

我有完全相同的问题 - GCC和stringstream什么也没有返回。

正如我发现的那样,诀窍是你必须先将一些文本数据放到stringstream中。

此代码......

stringstream ss(stringstream::out);
ss << 3.14159;
cout << "'" << ss.str() << "'" << endl;

获得这个结果:

''

但是如果我们先在字符串流中放入一个"" ......

stringstream ss(stringstream::out);
ss << "" << 3.14159;
cout << "'" << ss.str() << "'" << endl;

结果如预期:

'3.14159'