我相信以下代码可以安全地返回该字符串,即使该字符串并不优雅,并且可以按预期工作,但是我想对此进行确认,并且我还希望通过一个测试用例来证明它是安全的;也就是说,在重新使用堆栈之后,字符串的内容可通过.c_str()方法提供给调用者:即,如何强制释放/重新使用本地变量所在的堆栈(我正在使用Visual Studio 2019和PVS-Studio静态代码分析,但均未生成警告)。我不喜欢用全局变量代替本地的szLocalTime,也不喜欢函数中使用malloc的想法,因为这会使调用者的负担得以释放。我添加了一些用char []填充的情况的示例,例如不了解字符串的C lib或Win32函数。

string FormatTimestamp(SYSTEMTIME st)
{
    char szLocalTime[1000];

    szLocalTime[0] = 0;

    // *** Some code that depends on a char buffer fills szLocalTime...
    // eg. strftime(szLocalTime, sizeof(szLocalTime)...);
    // eg. GetDlgItemText(hDlg, ID, szLocalTime, sizeof(szLocalTime));



    string s = szLocalTime; // <-- the question relates to this
    return s;
}

最佳答案

std::string始终复制其初始化程序。这样很安全。

07-24 18:04