strtok函數(shù)會(huì)破壞被分解字符串的完整,調(diào)用前和調(diào)用后的s已經(jīng)不一樣了。如果要保持原字符串的完整,可以使用strchr和sscanf的組合等。
成都創(chuàng)新互聯(lián)公司主營吉水網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都app開發(fā),吉水h5重慶小程序開發(fā)搭建,吉水網(wǎng)站營銷推廣歡迎吉水等地區(qū)企業(yè)咨詢
strtok是一個(gè)線程不安全的函數(shù),因?yàn)樗褂昧遂o態(tài)分配的空間來存儲(chǔ)被分割的字符串位置
線程安全的函數(shù)叫strtok_r,ca。
運(yùn)用strtok來判斷ip或者mac的時(shí)候務(wù)必要先用其他的方法判斷'.'或':'的個(gè)數(shù),因?yàn)橛胹trtok截?cái)嗟脑挘热纾?192..168.0...8..."這個(gè)字符串,strtok只會(huì)截取四次,中間的...無論多少都會(huì)被當(dāng)作一個(gè)key。
函數(shù)strtok保存string中標(biāo)記后面的下一個(gè)字符的指針,并返回當(dāng)前標(biāo)記的指針。
后面再調(diào)用strtok時(shí),第一個(gè)參數(shù)為NULL,繼續(xù)將string標(biāo)記化。NULL參數(shù)表示調(diào)用strtok繼續(xù)從string中上次調(diào)用 strtok時(shí)保存的位置開始標(biāo)記化。
如果調(diào)用strtok時(shí)已經(jīng)沒有標(biāo)記,則strtok返回NULL。注意strtok修改輸入字符串,因此,如果調(diào)用strtok之后還要在程序中使用這個(gè)字符串,則應(yīng)復(fù)制這個(gè)字 符串。
以按照com的內(nèi)存管理方法來做。
標(biāo)準(zhǔn)做法是函數(shù)內(nèi)部分配內(nèi)存,并返回分配的內(nèi)存的大小。調(diào)用者負(fù)責(zé)釋放內(nèi)存。(可以參考FormatMessage函數(shù)的做法)
比如:
//函數(shù)中char* getXXXX(int* XXX){ char* temp = new char[LEN];//分配內(nèi)存 *XXX = LEN;//返回大小 ...... return temp;//返回char*}//調(diào)用者int XXX = 0;char* XXXX = getXXXX(XXX);.......delete XXXX;
是的。
多線程程序中,線程安全是必須要考慮的因素。C語言中大部分函庫函數(shù)都是線程安全的,但是也有幾個(gè)常用函數(shù)是線程不安全的,也叫不可重入函數(shù)。之所線程不安全,是因?yàn)檫@些系統(tǒng)函數(shù)使用了某些全局或者靜態(tài)變量。
我們知道,全局變量和靜態(tài)變量分別對應(yīng)內(nèi)存中的全局變量區(qū)和靜態(tài)存儲(chǔ)區(qū),這些區(qū)域都是可以跨函數(shù)跨線程訪問的。
malloc函數(shù)本身是支持多線程的,c語言大部分標(biāo)準(zhǔn)庫函數(shù)都是線程安全的,只有rand()等少數(shù)用到并會(huì)修改全局變量的函數(shù)會(huì)出問題。
話說回來,即使是不支持多線程的函數(shù),你仍然可以在多線程中利用臨界區(qū)控制機(jī)制來確保函數(shù)不發(fā)生重入。
文章題目:c語言中的線程安全函數(shù) c++線程安全的幾種方法
網(wǎng)站路徑:http://www.chinadenli.net/article22/dosiejc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、云服務(wù)器、服務(wù)器托管、關(guān)鍵詞優(yōu)化、域名注冊、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)