2011-04-01 40 views
2

strtok()函數使用靜態變量。strtok函數設計

因此它不可重入。並且不能用於解析多個字符串。

我想知道的是爲什麼strtok()是這樣設計的? strtok_r()應該是strtok()。

這個函數將來會留在標準庫中嗎?

+0

爲什麼天藍色,爸爸? – 2011-04-01 08:58:52

+4

因爲它是很久以前寫的,所以在多線程很常見並且在界面設計中沒有考慮它 – forsvarir 2011-04-01 08:59:01

+0

即使不考慮多線程,它仍然存在缺陷,因爲您不能解析多個線程一個字符串在同一時間。 – Nyan 2011-04-01 09:02:23

回答

3

該功能不會改變。向後兼容對於標準來說是一件大事。

爲什麼該功能不可重入?那麼,我在70年代並沒有在它的設計時期出現,但我認爲它的寫作用例並不需要重載。然後它的使用傳播,因爲它是有用的,並保持兼容性比reentrency增加的靈活性更可取。最後,委員會將現有的做法標準化,而不是在已經存在的情況下設計新的解決方案。