SDL_Log不支持%g、%e格式符 是否需要更换SDL版本解决?
问题根因
该问题由SDL 2.0.12内置的跨平台格式化逻辑与Visual Studio 2013对应的MSVC运行时浮点格式解析不兼容导致。SDL_Log没有直接调用系统的printf系列函数,而是自行实现了格式化逻辑,2.0.12版本的实现中没有对%g格式符做老版本MSVC的适配,因此出现空行输出问题;%f属于最常用的浮点格式,该版本已经做了兼容处理,所以可以正常输出。
解决方案
方案1:升级SDL版本(推荐)
该格式化适配bug已经在SDL 2.0.14及以上版本被官方修复,升级后%g、%e等所有标准浮点格式符都可以正常使用,无需修改业务代码,是成本最低的解决方式。
方案2:不更换SDL版本的规避方案
如果暂时无法升级SDL版本,可以用两种方式临时规避问题:
- 把需要用
%g输出的浮点参数先通过系统sprintf系列函数转成字符串,再用%s格式符传递给SDL_Log输出 - 直接调用系统的
printf/OutputDebugString等原生输出函数代替SDL_Log做浮点格式输出
规避方案代码示例:
// 方案2.1 转字符串后输出 char temp_buf[32]; sprintf(temp_buf, "%g", 1.0); SDL_Log("%s", temp_buf); // 方案2.2 直接使用原生输出 printf("%g\n", 1.0);
内容的提问来源于stack exchange,提问作者Mark VY
相关产品推荐
相关产品推荐

