strtoll
是一个C/C++标准库函数,用于将字符串转换为长整型(long long int)。这个函数在 <stdlib.h>
头文件中定义,可以处理不同进制的数字字符串,并将其转换为整数。
strtoll
函数的原型如下:
long long int strtoll(const char *nptr, char **endptr, int base);
nptr
是指向要转换的字符串的指针。endptr
是一个指向字符指针的指针,用于存储转换结束后的下一个字符位置。如果不需要这个信息,可以传递 NULL
。base
是转换的基数,范围从2到36,或者0。如果为0,函数会根据字符串的前缀自动确定基数(例如,“0x” 表示十六进制,“0” 表示八进制,否则为十进制)。endptr
可以检查字符串中是否有非法字符。long
类型更大的整数。long long int
,这意味着它可以返回非常大的整数。#include <stdio.h>
#include <stdlib.h>
int main() {
const char *str = "123456789012345";
char *end;
long long int num = strtoll(str, &end, 10);
if (*end != '\0') {
printf("Conversion error: Not a valid number.\n");
} else {
printf("Converted number: %lld\n", num);
}
return 0;
}
如果字符串不能被转换为有效的数字,strtoll
将返回0。可以通过检查 endptr
来确定是否发生了错误。
解决方法:检查 endptr
指向的位置是否为字符串的末尾(\0
),如果不是,则表示有非法字符。
当字符串表示的数字超出了 long long int
的范围时,strtoll
会返回 LLONG_MAX
或 LLONG_MIN
,并设置 errno
为 ERANGE
。
解决方法:在调用 strtoll
后检查 errno
是否被设置为 ERANGE
。
#include <errno.h>
// ... 其他代码 ...
errno = 0; // 清除 errno
long long int num = strtoll(str, &end, 10);
if (errno == ERANGE) {
printf("Conversion error: Number out of range.\n");
}
通过这些方法,可以有效地使用 strtoll
函数并处理可能出现的错误情况。