C++ 返回一个常量字符*

C++ 返回一个常量字符*,c++,function,char,constants,C++,Function,Char,Constants,我编写了一个返回当前日期的函数。在函数内部,我“cout”结果,它工作,但当我“cout”函数时,它不工作。我有垃圾 const char* engineCS::getDate() const { time_t t = time(0); struct tm *now = localtime(&t); char buf[20]; strftime(buf, sizeof(buf), "%Y-%m-%d %X", now); cout <<

我编写了一个返回当前日期的函数。在函数内部,我“cout”结果,它工作,但当我“cout”函数时,它不工作。我有垃圾

const char* engineCS::getDate() const
{
    time_t t = time(0);
    struct tm *now = localtime(&t);
    char buf[20];
    strftime(buf, sizeof(buf), "%Y-%m-%d %X", now);
    cout << buf << endl;
    return buf;
}
const char*engineCS::getDate()const
{
时间t=时间(0);
struct tm*now=localtime(&t);
char-buf[20];
strftime(buf,sizeof(buf),%Y-%m-%d%X”,现在);

不能将函数更改为return
std::string
,一切都会好起来。除了return类型之外,您不需要做任何进一步的更改。如果消费者需要原始
char const*
,请调用
c_str()
结果字符串上的成员函数。

将函数更改为返回
std::string
,一切都会好的。除了返回类型之外,您不需要做任何进一步的更改。如果消费者需要原始
字符常量*
,请调用
c_str()
结果字符串上的成员函数。

您正在返回指向本地的指针。不要这样做。您链接到的SO问题…回答了您的问题。您不能返回指向堆栈上某个内容的指针。使用
malloc
new
,buff是临时的。通常它会崩溃,您会得到垃圾。它的UBI不知道为什么要使用
cHAR*<代码> C++中的“代码> STD::String ?只需学习一个旧的方法。不要返回一个指向本地的指针。你要连接的问题……回答你的问题。你不能返回一个指向栈上的指针。使用<代码> Malc C < /C>或<代码>新< /代码>,Buff是临时的。通常崩溃,你得到GA。当C++中有<代码> STD::String  C++,只是学习旧的好方法;)NASTH:我不能强迫你的思想,但是如果你问我,你应该学习C++,NASTER而不是“char *BUF”和“BUF=新char(20);”试试:“静态char Buf(20);”或者对于你的第一个示例代码,只放一个“静态”在前面的“char Buf(20);”NASTH:我不能强迫你的思想,但是如果你问我,你应该学习C++,@ NASTER而不是“char *BUF”和“BUF =新char(20);”尝试:“静态char Buf(20);”或者对于你的第一个示例代码,只在“char Buf(20)”前面放一个“static”;
const char* engineCS::getDate() const
{
    time_t t = time(0);
    struct tm *now = localtime(&t);
    char *buf;
    buf = new char[20];
    strftime(buf, sizeof(buf), "%Y-%m-%d %X", now);
    cout << buf << endl;
    return buf;
}