日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

simple_strtoul()分析

發布時間:2023/12/13 综合教程 27 生活家
生活随笔 收集整理的這篇文章主要介紹了 simple_strtoul()分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

此函數有以下幾點值得注意:
1、第一個參數中的const。一般在函數的形參中,如果我們只是希望調用者使用該參數,而不會去改變該參數內容(一般是指針指向的內容),則可以聲明為const。
2、第二個參數。C語言中函數只能有一個返回值,但是有時候我們希望從函數中得到不止一個返回內容怎么辦呢?只能通過參數了。一般的參數是用來向函數輸入信息的,但是指針型參數可以間接用來從函數輸出信息。使用時用戶只需傳入一個相應的指針,函數中會把需要輸出的信息地址傳給這個指針,這樣在函數調用完成后,用戶即可到endp指針處去取函數傳出的值了。這就是用參數實現返回值的方式。但是要注意,在函數中千萬不可把局部變量的地址傳給輸出型指針,因為局部變量存在棧里,函數調用結束后即釋放了,傳出的指針指向的內容是棧上已經被釋放的部分,因此是無效的。(PS:高級語言中譬如C#有ref,out關鍵字,以明確指明該引用為輸出型)
3、第三個參數base。要注意這個base的機制,本函數中是按照這樣的理念來設計的。即如果str中有0x開頭且接下來是數字則忽略用戶調用時輸入的base,強制為16進制。如果str不是上面情況然后才看用戶輸入的base。用戶輸入非0則使用用戶指定的base,若用戶輸入0則自動判斷是8進制還是10進制。需要強調的是:使用習慣決定理念,理念決定代碼邏輯。
4、注意if(endp)這里,在輸出型參數使用中,函數內首先判斷endp是否為NULL,并以此來決定是否輸出這個機制來自于一個理念:這個輸出參數有可能是用戶關注的,也有可能是用戶不在意的。這樣處理可以給用戶自由,即用戶如果在意就傳一個有效指針過來接收;如果不在意調用時直接給個NULL就行。提供服務但不強迫,這樣很好。在OS的API中很多時候都有類似的技巧,請注意體會。

unsignedlongsimple_strtoul(constchar*cp,char**endp,unsignedintbase)
{
unsignedlongresult=0,value;
//對于base,首先如果*cp以0x開頭且下來是數字,則一定為16進制。然后如果用戶指定了一個非0的進制,則
//遵循用戶輸入的進制。如果用戶輸入了0進制,則根據是否0開頭來確定是8進制還是10進制
if(*cp=='0'){
cp++;
if((*cp=='x')&&isxdigit(cp[1])){
base=16;//如果cp是0x開頭的,下面一個又是數字,那么base一定為16。
cp++;//此時即使用戶輸入了一個base,也忽略這個base而強制其為16。
}
if(!base){
base=8;//如果用戶輸入base為0,cp是0開頭,接下來不是x,那么強制為8進制
}
}
if(!base){
base=10;//如果用戶輸入base為0,cp是非0開頭,則使用10進制。
}
//while循環里value<base是精髓所在。這個解析停止的條件不能是null,而應該是str中
//第一個不是數字的字母。這個字母的范圍取決于base,譬如如果是16進制那么f也算是數字。
//而如果是8進制那么9都不算是數字了。因此解析結束的范圍只能和base比較來限定。
while(isxdigit(*cp)&&(value=isdigit(*cp)?*cp-'0':(islower(*cp)
?toupper(*cp):*cp)-'A'+10)<base){
result=result*base+value;
cp++;
}
if(endp)//此處if判斷的作用是:用戶在使用這個函數時,如果不關心endp則可以直接
*endp=(char*)cp;//使用null,而不必擔心程序運行會出錯。這種處理技巧很實用,用戶可以
returnresult;//自行決定是否使用這個函數提供的參數式返回值。
}

#c

總結

以上是生活随笔為你收集整理的simple_strtoul()分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。