1、inet_ntoa 的實(shí)現(xiàn)返回了局部變量導(dǎo)致同一條命令不能兩次調(diào)用!
讓我們大家都捫心自問(wèn)一下,我們?cè)趯?xiě)程序的過(guò)程當(dāng)中是否使用了這種方法?這是一個(gè)比較危險(xiǎn),容易出錯(cuò)的方法。這種陷阱讓人防不勝防。想想,如果你有這樣的程序:
if ( strcmp( inet_ntoa(ip1), inet_ntoa(ip2) )==0 ) {
…. ….
}
本想判斷一下兩個(gè)IP地址是否一樣,卻不料掉入了那個(gè)陷阱——讓這個(gè)條件表達(dá)式永真。
這個(gè)事情告訴我們下面幾個(gè)道理:
1)慎用這種方式的設(shè)計(jì)。返回函數(shù)內(nèi)部的static內(nèi)存有很大的陷阱。
2)如果一定要使用這種方式的話。你就必須嚴(yán)肅地告訴所有使用這個(gè)函數(shù)的人,千萬(wàn)不要在一個(gè)表達(dá)式中多次使用這個(gè)函數(shù)。而且,還要告訴他們,不copy函數(shù)返回的內(nèi)存的內(nèi)容,而只是保存返回的內(nèi)存地址或是引用是沒(méi)用的。不然的話,后果概不負(fù)責(zé)。
3)C/C++是很危險(xiǎn)的世界,如果你不清楚他的話。還是回火星去吧。
奮斗為了更好的生活。
浙公網(wǎng)安備 33010602011771號(hào)