strtol,strtoll,strtoul, strtoull函數的使用

#include<stdlib.h> // 這個是C標準庫,與linux無關。這套函數是通用
long int strtol(const char *nptr, char **endptr, int base);
long long int strtoll(const char *nptr, char **endptr, int base);
unsigned long int strtoul(const char *nptr, char **endptr, int base);
unsigned long long int strtoull(const char *nptr, char **endptr, int base);

?

?

說明,第一個參數 nptr是要轉化的字符串。第三個參數base說明nptr的進制。base 取值范圍 0,2-36

這幾個函數會忽略nptr前面的空格( ' ', '\t', '\n' '\f', '\v' '\r' ,由isspace判定為真的字符)

while (*nptr && isspace ( *nptr ) ) ++ nptr;

然后遇到非合法字符結束;

base = 2; 合法字符為0, 1

base = 3; 合法字符為0,1, 2

...

base = 11; 合法字符為0,1,...,9,a(A)

...

base = 36;合法字符為0, 1, ...,9,a(A),...,z(Z)。

字符 a-z,是忽略大小寫的,混著來也行,例如 strtol("aA", NULL, 11)依然能得到正確的結果。

?

函數的第二個參數endptr可以為空,如果不為空,則 endptr 保存函數結束前的那個非合法字符的地址。

如果沒有合法字符,則 *endptr = nptr,函數返回0.

例如:

1.

char *endptr;

char nptr[]="123abc";

int ret = strtol(nptr, &endptr, 10 );

由于10進制里沒有“數字”a,所以掃描到a,結束。

這樣 ret = 123;

endptr = &nptr[3]; ( printf("%s", endptr);將得到字符串 abc )

2.

char nptr[]=" \n\t??? abc";

int ret = strtol(nptr, &endptr, 10 );

由于函數會忽略nptr前面的空格(' ', '\n'...),所以,從字符a開始掃描,但是遇見的“第一個”即是不合法字符。

所以函數結束。 ret=0; endptr = nptr;

?

?

?

?

以下的討論,會認為 nptr 前面沒有空格,

即執行過類似于while (*nptr? &&isspace ( *nptr ) ) ++ nptr;

如果base 為0.則分3種情況:

如果nptr 以0x(零x)開頭,則把nptr當成16進制處理。

如果npstr以0(零)開頭,則把nptr當成8進制處理。

否則,把nptr當成10進制。

?

?

?

?

對于函數執行錯誤,如傳了一個非合法base,則errno會設置相關值

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/385186.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385186.shtml
英文地址,請注明出處:http://en.pswp.cn/news/385186.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

eventfd(一)

函數原型&#xff1a; 創建的時候可以傳入一個計數器的初始值initval。 第二個參數flags在linux 2.6.26之前的版本是沒有使用的&#xff0c;必須初始化為0&#xff0c;在2.6.27之后的版本flag才被使用。 #include <sys/eventfd.h> int eventfd(unsigned int initval, in…

gettimeofday

作用&#xff1a;需要打印代碼執行到某處的時間&#xff0c;或者需要計算程序執行的時間差&#xff08;精確到微妙級&#xff09;。這時會用到gettimeofday函數&#xff0c;它可以返回自1970-01-01 00:00:00到現在經歷的秒數。 #include <sys/time.h> int gettimeofday(…

02-線性結構2 一元多項式的乘法與加法運算 (20 分

設計函數分別求兩個一元多項式的乘積與和。 輸入格式: 輸入分2行&#xff0c;每行分別先給出多項式非零項的個數&#xff0c;再以指數遞降方式輸入一個多項式非零項系數和指數&#xff08;絕對值均為不超過1000的整數&#xff09;。數字間以空格分隔。 輸出格式: 輸出分2行&…

1066 圖像過濾 (15 分)

圖像過濾是把圖像中不重要的像素都染成背景色&#xff0c;使得重要部分被凸顯出來。現給定一幅黑白圖像&#xff0c;要求你將灰度值位于某指定區間內的所有像素顏色都用一種指定的顏色替換。 輸入格式&#xff1a; 輸入在第一行給出一幅圖像的分辨率&#xff0c;即兩個正整數 M…

從零實現一個http服務器

如果GET請求帶參數&#xff0c;那么一般是附加在請求的url后面&#xff0c;參數與參數之間使用&分割&#xff0c;例如請求http://www.hootina.org/index_2013.php?param1value1m2value2m3value3&#xff0c;我們看下這個請求組裝的的http協議包格式&#xff1a; GET /ind…

1068 萬綠叢中一點紅 (20 分)

對于計算機而言&#xff0c;顏色不過是像素點對應的一個 24 位的數值。現給定一幅分辨率為 MN 的畫&#xff0c;要求你找出萬綠叢中的一點紅&#xff0c;即有獨一無二顏色的那個像素點&#xff0c;并且該點的顏色與其周圍 8 個相鄰像素的顏色差充分大。 輸入格式&#xff1a; 輸…

《個人項目學習指引》

1. 從零實現一個http服務器

1069 微博轉發抽獎 (20 分)

小明 PAT 考了滿分&#xff0c;高興之余決定發起微博轉發抽獎活動&#xff0c;從轉發的網友中按順序每隔 N 個人就發出一個紅包。請你編寫程序幫助他確定中獎名單。 輸入格式&#xff1a; 輸入第一行給出三個正整數 M&#xff08;≤ 1000&#xff09;、N 和 S&#xff0c;分別是…

【1】TCP三次握手的第三次的 ack包丟失會怎樣?

面試題&#xff1a; 在 TCP 建立連接的三次握手連接階段&#xff0c;如果客戶端發送的第三個ACK包丟了&#xff0c;那么客戶端和服務端分別進行什么處理呢&#xff1f; 相信了解 tcp 協議的人&#xff0c;三次握手的過程肯定很了解了。第三次的 ack 包丟失就是說在 client 端…

1070 結繩 (25 分

給定一段一段的繩子&#xff0c;你需要把它們串成一條繩。每次串連的時候&#xff0c;是把兩段繩子對折&#xff0c;再如下圖所示套接在一起。這樣得到的繩子又被當成是另一段繩子&#xff0c;可以再次對折去跟另一段繩子串連。每次串連后&#xff0c;原來兩段繩子的長度就會減…

動態規劃目錄

序號題目1 70. 爬樓梯

1071 小賭怡情 (15 分)

常言道“小賭怡情”。這是一個很簡單的小游戲&#xff1a;首先由計算機給出第一個整數&#xff1b;然后玩家下注賭第二個整數將會比第一個數大還是小&#xff1b;玩家下注 t 個籌碼后&#xff0c;計算機給出第二個數。若玩家猜對了&#xff0c;則系統獎勵玩家 t 個籌碼&#xf…

53. 最大子序和

給定一個整數數組 nums &#xff0c;找到一個具有最大和的連續子數組&#xff08;子數組最少包含一個元素&#xff09;&#xff0c;返回其最大和。 示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4], 輸出: 6 解釋: 連續子數組 [4,-1,2,1] 的和最大&#xff0c;為 6。 進階: 如果你已經實現…

1072 開學寄語 (20 分)

下圖是上海某校的新學期開學寄語&#xff1a;天將降大任于斯人也&#xff0c;必先刪其微博&#xff0c;卸其 QQ&#xff0c;封其電腦&#xff0c;奪其手機&#xff0c;收其 ipad&#xff0c;斷其 wifi&#xff0c;使其百無聊賴&#xff0c;然后&#xff0c;凈面、理發、整衣&am…

九大經典算法之插入排序、希爾排序

01 插入排序(Insertion Sort) 原理&#xff1a;每次選擇一個元素&#xff0c;并且將這個元素和整個數組中的所有元素進行比較&#xff0c;然后插入到合適的位置。 void insertion_sort(int arr[], int n) {int i,j;for (i 1; i < n; i) {int tmp arr[i];for (j i; j >…

九大經典算法之冒泡排序、快速排序

03 冒泡排序(Bubble Sort) 每次選擇兩個元素&#xff0c;按照需求進行交換&#xff08;比如需要升序排列的話&#xff0c;把較大的元素放在靠后一些的位置&#xff09;&#xff0c;循環 n 次&#xff08;n 為總元素個數&#xff09;&#xff0c;這樣小的元素會不斷 “冒泡” 到…

1073 多選題常見計分法 (20 分)

批改多選題是比較麻煩的事情&#xff0c;有很多不同的計分方法。有一種最常見的計分方法是&#xff1a;如果考生選擇了部分正確選項&#xff0c;并且沒有選擇任何錯誤選項&#xff0c;則得到 50% 分數&#xff1b;如果考生選擇了任何一個錯誤的選項&#xff0c;則不能得分。本題…

《二叉樹》目錄

序號題目標記 1 94. 二叉樹的中序遍歷 2 98. 驗證二叉搜索樹 3100. 相同的樹 4101. 對稱二叉樹 5 102. 二叉樹的層次遍歷 6 103. 二叉樹的鋸齒形層次遍歷 7104. 二叉樹的最大深度 8 105. 從前序與中序遍歷序列構造二叉樹 9106. 從中序與后序遍歷序列構造二叉樹 10107. 二叉…

1075 鏈表元素分類 (25 分)

給定一個單鏈表&#xff0c;請編寫程序將鏈表元素進行分類排列&#xff0c;使得所有負值元素都排在非負值元素的前面&#xff0c;而 [0, K] 區間內的元素都排在大于 K 的元素前面。但每一類內部元素的順序是不能改變的。例如&#xff1a;給定鏈表為 18→7→-4→0→5→-6→10→1…

C++ 面試(一)

1. 編譯器什么情況下&#xff0c;合成構造函數&#xff1f;[點擊鏈接(一)] 編譯器什么情況下&#xff0c;合成構造函數&#xff1f;