源程序
#include
#include
#include
int main()
{
char sql[1000]="\0";
sprintf(sql, " select DATE_FORMAT(ADDDATE('%%Y%%m%%d') from dual ");
printf(sql);
printf("\n");
return 0;
}
结果:
select DATE_FORMAT(ADDDATE('20140101', INTERVAL 2 DAY) , '%YSuccess134514060') from dual
不是预期的结果。
原因
sprintf把‘%%’ 解释成了一个%, 而printf又解释了一次。 但用GDB调试时可以看到sprintf时,sql的语句转义是正确的。 如果改成:
sprintf(sql, " select DATE_FORMAT(ADDDATE('%%%%Y%%%%m%%%%d') from dual ");
打印的结果就是:
select DATE_FORMAT(ADDDATE('20140101', INTERVAL 2 DAY) , '%Y%m%d') from dual