大家都知道 libc 的 printf()
及其家族。本章節(jié)將詳細介紹 PHP 聲明和使用的許多克隆,它們的目標(biāo)是什么,為什么使用它們,以及何時使用它們。
相關(guān)學(xué)習(xí)推薦:PHP編程從入門到精通
注意
Libc 中關(guān)于
printf()
及其朋友的文檔位于此處。
你知道這些函數(shù)很有用,但有時無法提供足夠的功能。另外,你知道向 printf()
添加格式字符串并非易事,沒有便攜性和有安全風(fēng)險。
PHP 添加了自己的類似于 printf 的函數(shù),取代了 libc 的,并且由內(nèi)部開發(fā)者使用。他們主要添加新的格式,并使用 zend_string代替 char *
等等,讓我們一起來看看。
警告
你必須掌握 libc 默認
printf()
格式。請閱讀它們的文檔。注意
添加了這些函數(shù)以 取代 libc 函數(shù),意味著如果你使用了
sprintf()
,不會使用到 libc 的sprintf()
,而是 PHP 取代了。除了傳統(tǒng)的printf()
外,其他內(nèi)容均被替換。
傳統(tǒng)用途
首先,你不應(yīng)該使用 sprintf()
,因為該函數(shù)不執(zhí)行任何檢查,并且導(dǎo)致許多緩沖區(qū)溢出錯誤。請避免使用它。
警告
盡可能避免使用
sprintf()
。
然后,你有一些選擇。
你知道結(jié)果緩沖區(qū)的大小
如果你知道緩沖區(qū)大小,snprintf()
或者 slprintf()
都可以使用。這些函數(shù)雖然在返回上不同,但是它們的功能是一樣的。
這兩個都是根據(jù)傳遞的格式來打印,并且無論發(fā)生什么,都會通過一個NUL
字節(jié) ‘