用sprintf函数打印包含'%' 和 '%s’到buff内的问题
具体代码如下:
- C/C++ code
char sqlBuff[512];sprintf(sqlBuff, "SELECT peomName, author, isKeep FROM PeomDetail WHERE (peomName LIKE \'%%s%\' OR\ author LIKE \'%%s%\' OR peomContent LIKE \'%%s%\') AND classifyId = %d ", pToSearch, pToSearch, pToSearch, PointFlg);
问题是在%s左右两遍加了%以后,打印到buff内我字符串就存在问题了。
而去掉左右两遍‘%’就一切正常。
而为了实现在sql中的搜索功能,‘%’这个通配符是不能少的。
有没有什么方法能做到两全其美呢? 难道一定要用strcat函数吗?
小弟菜鸟,希望大家多多指教,谢谢
[解决办法]
%%%s%%
[解决办法]
其实这样是不对的,这样的结果是:
select * from xx wherer a like '%%cond%%';
之所以输出的是一个%是因为 printf 时又把 % 解释了一遍。
你不信可以使用 OutputDebugString 输出看一下,如果你想使用 printf 输出时看到的是一个 % ,就需要多转义一次。如果你在程序中使用,就不能这么多 % 了
[解决办法]
楼主,你要的格式字符串是不是这样的: '%%s%'
那么,经过转义,就应该是:\'%%%s%%\'
%这个符号,需要用%%来得到,一个%需要2个;
中间的%s是格式化字符串,不需要了。