我想为 C 风格的函数strftime编写一个方便的包装器。我已经找到了一些将字符数组转换为字符串的选项,反之亦然。这是我的代码:
std::string Time::getAsFormattedString ( const std::string& format , const size_t& maxStringSize = 999 )
{
char* timeArray = 0;
std::string timeString;
// [OPTION_0]
timeArray = reinterpret_cast <char*> (malloc(sizeof(char)*maxStringSize)));
// [OPTION_1]
timeArray = const_cast <char*> (timeString.c_str());
// [OPTION_2]
timeArray = &(*(timeString.begin()));
strftime(timeArray,maxStringSize,format.c_str(),&this->time);
timeString = timeArray;
// [OPTION_0]
free(timeArray);
return timeString;
}
№0 选项看起来很安全,因为在释放内存之前不能抛出异常(编辑:timeString = timeArray
可以抛出一个,在该行周围需要 try-catch)
№1 const-casting 总是看起来像一个 hack
№2 似乎是最好的,我不知道它是否会出现一些问题
你能告诉我,哪一个是最安全、正确、最优的,也许是一种最佳实践。
谢谢你。