У меня есть пользовательская функция itoa, которая работает для целых чисел 10 и более, но по какой-то причине ничего не возвращает, если целое число передано в виде одной цифры. Я не могу понять, почему это так.Функция itoa не работает для целых чисел с одной цифрой
Когда я печатаю массив после того, как оно было отменено, просто доступ к array[0]
и array[1]
, я вижу, что нуль и одна цифра печатается хорошо, но есть некоторый странный трейлинг характер после одной цифры. Это происходит только для отдельных цифр. , например (blank)7e
или (blank)4r
Функция:
char* customitoa(int number, char * array, int base){
array[0] = '\0';
int quotient = number, i = 1;
/* stores integers as chars into array backwards */
while(quotient != 0){
int temp, length = 1;
temp = quotient % base;
length++;
array = realloc(array, (length)*sizeof(char));
if (temp <= 9){
array[i++] = (char)(((int)'0')+temp);
} else {
array[i++] = (char)(temp + ('A' - 10));
}
quotient = quotient/base;
}
/* reverse array*/
int j; int k;
k = 0;
j = i - 1;
char temp;
/* - different swap functions based on odd or even sized integers */
if((j%2) == 1){
while((k <= ((j/2)+1))){
temp = array[k];
array[k] = array[j];
array[j] = temp;
k = k+1;
j = j - 1;
}
} else {
while(k <= (((j)/2))){
temp = array[k];
array[k] = array[j];
array[j] = temp;
k = k+1;
j = j - 1;
}
}
return array;
}
функция вызывается в этом контексте:
char *array;
array = malloc(length*sizeof(char));
array = myitoa(number, array, base);
printf("%s", array);
free(array);
'SizeOf (Char)' это '1'. –
Код разворота должен быть одинаковым для нечетных и четных строк. Если 'char * beg' указывает на первую цифру, а' char * end' указывает на последнюю цифру, тогда 'while (beg