【问题标题】:C++ Stringstream int to string but returns nullC++ Stringstream int 到字符串但返回 null
【发布时间】:2010-03-19 15:48:30
【问题描述】:

嗨,下面是我的功能:

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 类的值。但是当我将它们传递给字符串流时,当我尝试输出它时,它们只会清除字符串。但是,如果我在ss &lt;&lt; "Some text" &lt;&lt; endl; 中没有int,则此输出很好。我做错了什么=S

//编辑

好的; 这是调用代码:

tmp = cur->get_print();

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

这段代码……

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

重新运行“测试”,仅此而已。如果我取出 "Test " &lt;&lt; 我返回的字符串是 ""

如果这有什么不同的话,我在 Mac OS/X 10.6.2 上使用 GCC 4.2。

【问题讨论】:

  • 对我来说很好;你能显示调用代码吗?
  • 您可以将该代码缩短至少两行(即 40%,不包括空白行),而不会降低其可读性。
  • “他们只是清除字符串”是什么意思?
  • 我看不出代码有任何问题。我需要查看更多上下文代码。另外,说get_print()。而且你不需要创建临时的string,只需返回ss.str()
  • 更新了代码并试图解释更多。

标签: c++ string int stringstream


【解决方案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;
}

生产:

测试 5 123456

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

为了进一步测试,您可能需要强制对这些值进行强制转换,看看它是否有帮助:

out &lt;&lt; "Test " &lt;&lt; (int)e_id &lt;&lt; " " &lt;&lt; (int)e_type;

由于我无法重现此错误,恐怕我无法提供任何进一步的帮助。但祝你好运!

【讨论】:

    【解决方案2】:

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

    string Employee::get_print(void) {
    
       char out[50];
    
       sprintf(out, "%d %d", e_id, e_type);
    
       string output = out;
    
       return output;
    } 
    

    这将返回所需的字符串。

    【讨论】:

    • 再一次,变量output 是多余的。另外,我认为通过避免症状来掩盖应用程序中的某个错误并不是一个好主意。您的初始代码很好。如果它产生了错误的结果,这意味着 其他地方存在错误。您的更改并未修复该错误。
    • 这是 Xcode 的一个错误,它适用于 NetBeans。 (使用字符串流)
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        我遇到了完全相同的问题 - GCC 和 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'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多