0

10 以上の整数に対して機能するカスタム itoa 関数がありますが、渡された整数が 1 桁の場合、何らかの理由で何も返されません。それがなぜなのか理解できないようです。

array[0]andにアクセスするだけで配列を反転させた後に配列を出力するとarray[1]、null とその 1 桁が正常に出力されることがわかりますが、1 桁の後に奇妙な末尾文字があります。これは 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);
4

1 に答える 1

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

このループでは、長さは常に 1 です。

への変更

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

再割り当ては最後に 1 回実行されます

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;
}
于 2013-04-28T07:55:46.517 に答える