0

我想知道我是否可以得到一些帮助。我正在尝试根据给我们的实验室任务中的要求移植一些代码。基本上我已经用 C 创建了一些程序,现在的部分要求是将 printf 和 snprintf 语句移植到 C++ 中。printf 我想我可以管理,因为使用 cout << "whatever"<< endl 似乎是标准的。问题在于 snprintf,并使用 ostream oss() 替换它。这是我要解决的代码的一个分区。

char* formatTime(
                struct timeval* tv,     // Pointer to timeval struct
                char* buf,              // Pointer to char buf
                size_t len              // size of buffer
                )
{
    struct ExpandedTime etime2;         // Struct object declaration


    // Array containing strings for the months

    const char* month[] =
        {
        "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul",
        "Aug", "Sep", "Oct", "Nov", "Dec"
        };


    if (len > 0)                        // If statement for 0 length buf error
    {
        localTime(tv, &etime2);

        // Printing to the supplied buffer in the main program
        char timebuf[80];               // Buffer to hold the time stamp
        ostream oss(timebuf, sizeof(timebuf));

        oss << etime2.et_year << ends;
        cout << timebuf << endl;
//      snprintf(buf, len, "%02i %s %02i %02i:%02i:%02i:%03i",
//      etime2.et_year, month[etime2.et_mon], etime2.et_day, etime2.et_hour,
//      etime2.et_min, etime2.et_sec, etime2.et_usec);
    }

现在我已经注释掉了原来的 snprintf 语句。我只是测试存储在某种结构中的“年份”参数。但是我不断收到以下错误。

rkim@l3055serv:~/plot$ make
g++ -g -Wno-deprecated -c fmttime.cc fmttime.o
fmttime.cc: In function 'char* formatTime(timeval*, char*, size_t)':
fmttime.cc:273: error: no matching function for call to 'std::basic_ostream<char, std::char_traits<char> >::basic_ostream(char [80], unsigned int)'
/usr/include/c++/4.4/ostream:361: note: candidates are: std::basic_ostream<_CharT, _Traits>::basic_ostream() [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.4/ostream:82: note:                 std::basic_ostream<_CharT, _Traits>::basic_ostream(std::basic_streambuf<_CharT, _Traits>*) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.4/iosfwd:56: note:                 std::basic_ostream<char, std::char_traits<char> >::basic_ostream(const std::basic_ostream<char, std::char_traits<char> >&)
make: *** [fmttime.o] Error 1

我确保包含 iostream 和 sstream 以及 using namespace std; 但是我仍然收到此错误并且无法解决它。老实说,我们刚刚开始学习 C++,所以部分问题在于 C++ 的整体抽象性。然而,这个使用 osream 和 oss 的代码分区是由我们的实验室讲师提供给我们的,除了他使用错误的标头“strstream 和 oststream”之外,就我对 C++ 的了解而言,这似乎是有道理的......

4

3 回答 3

2

您正在寻找 std::ostringstream,而不是 ostream。

于 2013-04-14T20:23:58.717 回答
1

我建议你ostreamostringstream.

ostream是一个抽象的通用类 。

于 2013-04-14T20:24:17.593 回答
1

ostream没有这样的构造函数,您可能想使用 anostringstream和类似的东西:

std::ostringstream oss;
oss << etime2.et_year << ends;

std::cout << oss.str() << endl;

...但是使用它并没有多大意义,oss因为您不妨直接流式传输到std::cout.

于 2013-04-14T20:26:35.083 回答