下面的代码出现了编译错误:
((char *)缓冲器);
我得到的错误信息是:
cc1:格式不是字符串文字,也不是格式参数.
我怀疑有一些库我忘了安装,因为我能够编译和运行代码,在另一台机器上没有错误.
问题是我能够在其他机器上运行相同的代码.我怀疑gcc版本的不同会导致这样的问题吗?
发布于 2009-07-22 20:00:02
较新的GCC版本试图解析传递给printf和类似函数的格式字符串,并确定参数列表是否与格式字符串正确匹配。它不能这样做,因为您已经为第一个参数传递了一个缓冲区,这通常是一个格式字符串。
您的代码不是不正确的C,它只是C的糟糕用法,正如其他人提到的,您应该使用"%s“作为格式字符串来打印单个字符串。如果您不控制输入,这将保护您免受涉及字符串中百分比符号的错误类别的影响。最好的做法是将字符串文字作为第一个参数传递给printf或sprintf系列函数。
发布于 2009-07-22 19:45:49
试一试
printf("%s",(char*)缓冲区);
;-)
发布于 2009-07-22 20:08:42
此警告由gcc生成,如果
-Wformat-nonliteral已经设定好了。它不是-Wall或-Wextra的一部分(至少4.4.0版本是这样的),所以如果您想要编译没有警告的代码,只需删除它即可。
https://stackoverflow.com/questions/1167745
复制相似问题