在C++中,strtoll
函数用于将字符串转换为长整型(long long
)
如果strtoll
遇到非法字符,它会尝试解析字符串的开头部分,直到遇到无法识别的字符。此时,它会将已解析部分的值返回,并将指针endptr
设置为指向第一个未解析的字符。你可以检查endptr
来确定是否存在非法字符。
下面是一个示例:
#include<iostream>
#include <cstdlib>
#include <cstring>
int main() {
const char* str = "123abc";
char* endptr;
long long value = std::strtoll(str, &endptr, 10);
if (endptr == str || *endptr != '\0') {
std::cout << "Invalid characters detected at position: "<< endptr - str<< std::endl;
} else {
std::cout << "Value: "<< value<< std::endl;
}
return 0;
}
在这个示例中,我们尝试将字符串"123abc"
转换为长整型。strtoll
会解析前三个字符("123"
),然后遇到非法字符a
。此时,endptr
将指向a
。我们可以通过检查endptr
来判断是否存在非法字符。如果endptr
指向字符串的末尾('\0'
),则表示没有非法字符;否则,表示存在非法字符。