strtol()函數用法及命令行參數使用

strtol()函數用法

將字符串轉換成長整型數(long)
頭文件#include <stdlub.h>
其原型爲long int strtol(const char* str, char** endptr,int base);
*【參數說明】str 爲要轉換的字符串,endstr 爲第一個不能轉換的字符的指針,base 爲字符串 str 所採用的進制。
*【函數說明】strtol() 會將參數 str 字符串根據參數 base 來轉換成長整型數(long)。參數 base 範圍從2 至36,或0。參數base 代表 str 採用的進制方式,如base 值爲10 則採用10 進制,若base 值爲16 則採用16 進制等。
strtol() 會掃描參數 str 字符串,跳過前面的空白字符(例如空格,tab縮進等,可以通過 isspace() 函數來檢測),直到遇上數字或正負符號纔開始做轉換,再遇到非數字或字符串結束時(’\0’)結束轉換,並將結果返回。
兩點注意:

  1. 當 base 的值爲 0 時,默認採用 10 進制轉換,但如果遇到 ‘0x’ / ‘0X’ 前置字符則會使用 16 進制轉換,遇到 ‘0’ 前置字符則會使用 8 進制轉換。
  2. 若endptr 不爲NULL,則會將遇到的不符合條件而終止的字符指針由 endptr 傳回;若 endptr 爲 NULL,則表示該參數無效,或不使用該參數。
    【返回值】返回轉換後的長整型數;如果不能轉換或者 str 爲空字符串,那麼返回 0(0L);如果轉換得到的值超出 long int 所能表示的範圍,函數將返回 LONG_MAX 或 LONG_MIN(在 limits.h 頭文件中定義),並將 errno 的值設置爲 ERANGE。
    【示例】將字符串轉換成10進制
#include <stdio.h>
#include <stdlib.h>
int main ()
{
	// 四個數對應的進制分別是十進制、二進制、八進制和十六進制
  char szNumbers[] = "201 10101 0321 0x123"; // 對應的是進制數分別是201,21,209,291
  char * pEnd; // 用來傳回不符合條件而終止的字符指針
  long int li1, li2, li3, li4;
  
  li1 = strtol (szNumbers,&pEnd,10); // 以十進制轉換“201”,遇到空格終止
  printf("li1=%ld,pEnd=%d\n",li1,*pEnd); 

  li2 = strtol (pEnd,&pEnd,2); // 以二進制轉換“10101”,遇到空格終止
  printf("li2=%ld,pEnd=%d\n",li2,*pEnd);
  
  li3 = strtol (pEnd,&pEnd,8); // 以八進制轉換“0321”,遇到空格終止
  printf("li3=%ld,pEnd=%d\n",li3,*pEnd);

  li4 = strtol (pEnd,&pEnd,16); // 以十六進制轉換“0x123”,遇到NULL終止
  printf("li4=%ld,pEnd=%d\n",li4,*pEnd);

  return 0;
}

【運行結果】

li1=201,pEnd=32 // 空格的ASCII碼爲32
li2=10101,pEnd=32
li3=209,pEnd=32
li4=291,pEnd=0 // NULL的ASCII碼爲0

使用strtol讀取命令行參數

通過命令行輸入,將字符串轉換爲整數

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv) {
    if(argc < 2) {
        printf("Input Error!\n");
        return 0;
    }
    char *ptr;
    // argv[0]是`./a.out`
    int num = strtol(argv[1], &ptr, 10);
    printf("num = %d\n",num);
    return 0;
}

輸出結果
在這裏插入圖片描述在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章