我在以下代码上遇到编译错误:
printf((char*)buffer);
以及我得到的错误消息是:
cc1:格式不是字符串文字,没有格式参数...
我怀疑有些库我忘了安装,因为我能够在其他机器上编译并运行代码而没有错误...
PS:问题随着我能够在其他机器上运行相同的代码而增加...我怀疑gcc版本的差异可能会导致这样的问题?
较新的GCC版本尝试解析传递给printf和类似函数的格式字符串,并确定参数列表是否与格式字符串正确匹配.它不能这样做,因为你已经为第一个参数传递了一个缓冲区,它通常是一个格式字符串.
您的代码不是错误的C,它只是C的不良用法.正如其他人提到的那样,您应该使用"%s"作为格式字符串来打印单个字符串.如果您不控制输入,这可以保护您免受涉及字符串中百分号的一类错误的影响.除了字符串文字作为printf或sprintf系列函数的第一个参数之外,最好不要传递任何东西.