【发布时间】:2014-01-09 19:07:40
【问题描述】:
#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;
}
我的错误:
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> ]
为什么这不起作用?
【问题讨论】:
-
您无法从临时字符串中获取
const char*( c_str() )。从 numberToString 返回后,您的stringstream将被销毁,其底层std::string也将被销毁。当您调用c_str()时,它将返回一个指向仅在std::string生命周期内有效的指针。我建议使用std::string,因为它是一个对象(不是指针),它会在需要时被复制。 -
仅供参考,标准库提供了此功能,无需为它编写函数。 en.cppreference.com/w/cpp/string/basic_string/to_string
-
你读过文档,嘿? ...