Bootstrap

c语言转义字符2个百分号,c语言 百分号转义问题

源程序

#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

;