我本周刚开始学习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它不会。
答案 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;