最近一直在做阅度软件,做阅读的同学都应该知道fbreader这个开源框架,它具有很强大的功能,包括ireader在内的国内很多阅读软件都基于它或者借鉴了它很多思想。所以我也在研究它,最近把它最新稳定版源码从github弄下来编译的时候发现问题了。在编译它的c库的时候发现 format not a string literal and no format arguments [-Werror=format-security] 如下图
cpp中出错的行是:
原因:
它的意思大概就是说这里需要的参数是 char const*而这里传的是一个 string,虽然人调用了c_str()的方法,可是它就是不认啊。这个问题也纠结了我好久。最后终于在一个国外的网站找到了解答.大概原因就是我用的cygwin基于的linux内核版本太低了,不支持这样。
解答:
解决方法很简单,就在需要char const* 你又必须传一个string.c_str()的时候在前面加一个"%s":