一、strtol函數用法
strtol函數是C語言標準庫函數之一,用於將字符串轉換為長整型數值。它的基本用法如下:
long int strtol(const char *str, char **endptr, int base);
其中,str為待轉換的字符串,endptr指向轉換結束的位置,可以為NULL,base為轉換進制,通常為10進制。
舉個例子:
char str[] = "12345"; char *endptr; long int value = strtol(str, &endptr, 10); printf("Value: %ld\n", value);
執行結果為:Value: 12345
二、strtof函數
與strtol函數不同,strtof函數用於將字符串轉換為浮點型數值。其用法如下:
float strtof(const char *str, char **endptr);
其中,str為待轉換的字符串,endptr指向轉換結束的位置,可以為NULL。
舉個例子:
char str[] = "3.1415926"; char *endptr; float value = strtof(str, &endptr); printf("Value: %f\n", value);
執行結果為:Value: 3.141593
三、strtol函數的功能
strtol函數不僅可以將字符串轉換為長整型數值,還可以判斷字符串是否合法,並且可以做溢出檢查。當轉換的結果超出了長整型數值的範圍時,strtol函數將返回LONG_MAX或LONG_MIN,並設置errno變量為ERANGE。
舉個例子:
char str[] = "2147483648"; char *endptr; long int value = strtol(str, &endptr, 10); if (errno == ERANGE) { printf("Out of range\n"); } else { printf("Value: %ld\n", value); }
執行結果為:Out of range
四、strtofloat函數
strtofloat函數是自定義的函數,用於將字符串轉換為浮點型數值,實現方式與strtol函數類似。
float strtofloat(const char *str, char **endptr);
舉個例子:
char str[] = "3.1415926"; char *endptr; float value = strtofloat(str, &endptr); printf("Value: %f\n", value);
執行結果為:Value: 3.141593
五、strtol函數頭文件
strtol函數的頭文件是stdlib.h,需要在程序中進行引用。
#include <stdlib.h>
六、strtodate函數
strtodate函數是自定義的函數,用於將字符串轉換為日期時間。其用法如下:
time_t strtodate(const char *str);
其中,str為待轉換的字符串,格式為yyyy-MM-dd HH:mm:ss。
舉個例子:
char str[] = "2021-01-01 00:00:00"; time_t value = strtodate(str); printf("Value: %ld\n", (long int)value);
執行結果為:Value: 1609459200
七、strtol函數源碼
下面是strtol函數的源碼:
long int strtol(const char *str, char **endptr, int base) { const char *p = str; long int num = 0; int sign = 1; // 處理正負號 if (*p == '-') { sign = -1; p++; } else if (*p == '+') { p++; } // 處理進制 if (base == 0) { if (*p == '0') { base = 8; p++; if (*p == 'x' || *p == 'X') { base = 16; p++; } } else { base = 10; } } else if (base == 16 && *p == '0' && (*(p+1) == 'x' || *(p+1) == 'X')) { p += 2; } // 轉換過程 while (*p) { int digit; if (*p >= '0' && *p = 'a' && *p = 'A' && *p = base) { break; } num = num * base + digit; p++; } if (endptr) { *endptr = (char *)p; } return sign * num; }
八、strtoul函數
strtoul函數與strtol函數類似,不同的是將字符串轉換為無符號長整型數值,其用法如下:
unsigned long int strtoul(const char *str, char **endptr, int base);
舉個例子:
char str[] = "12345"; char *endptr; unsigned long int value = strtoul(str, &endptr, 10); printf("Value: %lu\n", value);
執行結果為:Value: 12345
九、strtol函數用法講解
在使用strtol函數時,需要注意以下幾點:
- endptr可以為NULL,如果不為NULL,那麼*endptr將指向轉換結束的位置。
- 如果字符串中有非法字符,轉換將會在此處停止。
- 如果轉換結果超出了長整型數值的範圍,會返回LONG_MAX或LONG_MIN,並設置errno變量為ERANGE。
- 進制參數base通常為10進制,如果為0,則自動根據字符串是否以0開頭來選擇進制,以0x開頭則為16進制,否則為8進制。
- 對於十六進制數,可以以0x或0X開頭,對於其它進制,不允許開頭0,否則可能會被認為是八進制。
十、strtol函數最大正數最小負數選取
strtol函數支持的最大正數和最小負數取決於平台和標準庫實現。通常的規定是,long int佔用32位,最大值為2^31-1,最小值為-2^31。可以在頭文件limits.h中找到這個值。
舉個例子:
#include <stdio.h> #include <limits.h> int main() { printf("LONG_MAX: %ld\n", LONG_MAX); printf("LONG_MIN: %ld\n", LONG_MIN); return 0; }
執行結果為:
LONG_MAX: 2147483647 LONG_MIN: -2147483648
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/247713.html