读书人

用sprintf函数打印包含#039;%#039; 和 #039;%s’到

发布时间: 2012-03-13 11:21:11 作者: rapoo

用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 输出时看到的是一个 % ,就需要多转义一次。如果你在程序中使用,就不能这么多 % 了
探讨

引用:
int main()
{
char buff[123];
sprintf(buff, "select * from xx where a like '%%%%%s%%%%'", "cond");
printf(buff);
return 0;
}


能告诉我,为什么输出一个%需要多加3个%吗?

[解决办法]
楼主,你要的格式字符串是不是这样的: '%%s%'
那么,经过转义,就应该是:\'%%%s%%\'

%这个符号,需要用%%来得到,一个%需要2个;
中间的%s是格式化字符串,不需要了。

读书人网 >C++

热点推荐