函数strtol在C中超出范围......或者不是

时间:2012-06-01 03:06:58

标签: c std strtol

我尝试从带有strtol()的字符串中读取一个数字,并返回LONG_MAX数字,该数字应该在数字超出范围时返回,但我的数字不是那么大

main(){
    char linea[30]={"110111010111111000000000"};
    long num=strtol(linea,NULL,0);
    printf("%s\n%X",linea,num);
}

实际结果:
110111010111111000000000个
7FFFFFFF

需要的结果:
110111010111111000000000个
DD7C00

2 个答案:

答案 0 :(得分:5)

根据strtol的手册页,你给出的'0'参数意味着'使用你最好的判断',在这种情况下是十进制。如果您希望它转换二进制号码,作为您指定的“需要的结果”建议,请不要使用“0”,请使用“2”。

答案 1 :(得分:0)

可能是因为你传入了基数0

尝试:

int main(){
    char linea[30] = {"110111010111111000000000"};
    long num       = strtol(linea, NULL, 10);
    printf("%s\n%X", linea, num);
}

修改 显然,基数0是strtol函数的特殊值:

  

如果base的值为0,则为主题序列的预期形式   是十进制常量,八进制常量或十六进制   常数,其中任何一个都可以以“+”或“ - ”符号开头。

所以我猜你可以使用0,抱歉让你怀疑。