首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

用sprintf函数打印包含'%' 和 '%s’到buff内的有关问题

2012-03-13 
用sprintf函数打印包含% 和 %s’到buff内的问题具体代码如下:C/C++ codechar sqlBuff[512]sprintf(sqlB

用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是格式化字符串,不需要了。

热点排行