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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2023/11/30 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 strtol,strtoll,strtoul, strtoull函数的使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
#include<stdlib.h> // 這個是C標準庫,與linux無關。這套函數(shù)是通用 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);

?

?

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

這幾個函數(shù)會忽略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)依然能得到正確的結果。

?

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

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

例如:

1.

char *endptr;

char nptr[]="123abc";

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

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

這樣 ret = 123;

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

2.

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

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

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

所以函數(shù)結束。 ret=0; endptr = nptr;

?

?

?

?

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

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

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

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

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

否則,把nptr當成10進制。

?

?

?

?

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

總結

以上是生活随笔為你收集整理的strtol,strtoll,strtoul, strtoull函数的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。