一、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
微信掃一掃
支付寶掃一掃