Strtol正在返回错误的值

时间:2017-11-08 19:10:37

标签: c

我本周刚开始学习c。

我试图将单个字符转换为long / int。
我的问题是,当我通过main调用convenrtCharToInt时,它正在重新调整正确的值,但是当我通过另一个函数调用此函数,并给它一个字符数组内的字符时,我得到10而不是1。我试过只在函数中输入*“1”,它仍然给我错误的值,它给了我10而不是1长。

double base2ToBase10(char test[],int curBase){

double totalSum;
long currentNumber;
int arrayLength=countArray(test);
for(int i=0; i<arrayLength ;i++) {
    currentNumber=convenrtCharToInt(test[i]);
    if ((test[i] < *"1")) {
        totalSum += 0;
    } else {
        totalSum += currentNumber*pow(curBase, arrayLength - 1 - i);

    }

}return totalSum;}

long convenrtCharToInt(char c)
{
    long postConvertValue = strtol ( &c,NULL, 10 );
    return postConvertValue;

所以,如果我通过它调用它,无论我怎么做,但如果我尝试使用它时,我调用base2ToBase10它不会。

1 个答案:

答案 0 :(得分:1)

问题在于

中的&c
long convenrtCharToInt(char c) {
    long postConvertValue = strtol ( &c,NULL, 10 );

将一个指向单个字符的指针传递给一个函数,该函数需要一个\0字符串结尾的字符串。因此,除非c的值为0,否则函数strtol将从`c的边界访问内存,从而产生未定义的行为。

要克服这个问题,你可以简单地写一下

int v = c - '0'; // substract ASCII-Code of digit '0' (i.e. 48)
return (v >= 0 && v <= 9) ? v : -1;