2015-11-02 53 views
-1

我正在使用strtoll函数将字符串转换为long long long整数。 当输入字符串是63字符我没有得到任何问题。字符串转换为long long整数使用strtoll时char超过

但是,当它超过63个字符给我错误的结果。

char *pEnd1; 
long long ll_i1 = 0; 
ll_i1 = strtoll (newDE1, &pEnd1, 2); 

工作==> newDE1 =“11111011011101101 ................”63个字符。 不工作==> newDE1 =“11111011011101101 ................”64个字符。 是否有任何内置的功能来实现。

+2

提供** **所有需要的信息。 C中没有内建函数。 – Olaf

+0

检查你的数组大小newDE1 –

回答

1

strtoll man page

的strtol将()函数返回转换的结果,除非 值将下溢或溢出。如果发生下溢,strtol() 将返回LONG_MIN。 如果发生溢出,strtol()返回LONG_MAX。 在这两种情况下,errno都设置为ERANGE。对于 strtoll()(与LLONG_MIN和LLONG_MAX而不是LONG_MIN和 LONG_MAX)一样适用。

鉴于您已发布尝试转换超过63个字符的字符串,您可能会发生溢出。

+0

是的,我正在溢出。 – user2357643

+0

@ user2357643所以你的问题是,你不应该将字符串传递给'strtoll',它会使'long long int'数据类型上溢或下溢。 – Magisch

+0

有什么办法可以解决这个问题。 – user2357643

0

stroll()将设置正确的错误号(ERANGE),并提供两种llong_min如果该值将下溢,或llong_max是否会溢出,这是你被传递更多然后63个字符导致什么。

0

由于值溢出LLONG_MAX,因此OP的long long不能将64- char字符串表示为正整数。

对于在unsigned long long范围使用值:

// long long ll_i1 = 0; 
// ll_i1 = strtoull (newDE1, &pEnd1, 2); 
unsigned long long ull_i1; 
ull_i1 = strtoull (newDE1, &pEnd1, 2);