2013-04-28 4 views
0

У меня есть пользовательская функция 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); 
+0

'SizeOf (Char)' это '1'. –

+1

Код разворота должен быть одинаковым для нечетных и четных строк. Если 'char * beg' указывает на первую цифру, а' char * end' указывает на последнюю цифру, тогда 'while (beg

ответ

1
while(quotient != 0){ 
    int temp, length = 1; 

Длина всегда равен 1 в этом цикле.

изменение

int length = 1; 
while(quotient != 0){ 
    int temp; 

перераспределить выполняется один раз в конце

array = realloc(array, (length)*sizeof(char)); 

движения снаружи в то время как петли

}//while end 
array = realloc(array, (length)*sizeof(char)); 

Следующие условия неверны

while((k <= ((j/2)+1))){ 
.... 
while(k <= (((j)/2))){ 

изменение

int L = j/2; 
... 
while(k <= L){ 
... 
while(k <= L-1){ 

Чтобы подвести итог в одном

if(j%2 == 1) 
    L=j/2; 
else 
    L=j/2-1; 
while(k <= L){ 
    temp = array[k]; 
    array[k] = array[j]; 
    array[j] = temp; 
    k = k+1; 
    j = j - 1; 
} 
Смежные вопросы