将std :: string转换为const char*,获取错误

Tet*_*ure 3 c++ string types

#include <iostream>
#include <sstream>

template <typename T>
const char* numberToString(T number) {
    std::ostringstream ss;
    ss << number;
    return ss.c_str();
}

int main() {
    printf(numberToString(123));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的错误:

1>d:\programming\euler\problem 4\problem 4\problem 4\source.cpp(8): error C2039: 'c_str' : is not a member of 'std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char>>'
1>          d:\programming\euler\problem 4\problem 4\problem 4\source.cpp(26) : see reference to function template instantiation 'const char *numberToString<int>(T)' being compiled
1>          with
1>          [
1>              T=int
1>          ]
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?

era*_*ran 7

c_str是的成员std::string,而不是ostringstream.如果您想要string从流中获取,请使用str().但请注意,const char*从中返回a string是错误的 - string在您使用之前,遗嘱将超出范围const char*.因此,让你的函数返回一个string(或者让它得到一个缓冲区来写):

template <typename T>
std::string numberToString(T number) {
    std::ostringstream ss;
    ss << number;
    return ss.str();
}
Run Code Online (Sandbox Code Playgroud)