我对uint_fast16_t的格式有问题
uint_fast16_t runningOrderNo;
std::string ATNativeConnector::_GetNextClOrdId()
{
time_t t = time(NULL);
struct tm* tim = localtime(&t);
std::stringstream sstr;
char temp[10];
sprintf(temp, "%02d%02d%02d%03u", tim->tm_hour, tim->tm_min, tim->tm_sec, ++runningOrderNo);
sstr << temp; //<< std::setfill('0') << std::setw(2) << tim->tm_hour << tim->tm_min << tim->tm_sec << ++runningOrderNo;
runningOrderNo %= 999;
//LOG4CXX_DEBUG(logger,"Generated " << sstr.str() << " second:" << tim->tm_sec << " order id");
return sstr.str();
}
Run Code Online (Sandbox Code Playgroud)
我收到这样的警告.
ATNativeConnector.cpp:6156:95:警告:格式'%u'需要'unsigned int'类型的参数,但参数6的类型为'uint_fast16_t {aka long unsigned int}'[ - Wformat =]
我从这个页面尝试了不同的格式,如果有人会帮助我,我会感激不尽.
sth*_*sth 10
正确的方法是使用PRIuFAST16您链接的页面中的宏:
sprintf(temp, "%02d%02d%02d%03" PRIuFAST16, ..., ++runningOrderNo);
Run Code Online (Sandbox Code Playgroud)
宏扩展为一个字符串,然后由预处理器与相邻的字符串文字连接.这样,稍微奇怪的外观"%02d%02d%02d%03" PRIuFAST16最终会成为包含正确格式说明符的一个字符串文字.