itoa書いてみた

なんか面接で出されるらしいんで、itoaを書いてみた。
mainの第一引数をchar*型で受け取ったものを標準関数でintに直し、それを改めてchar配列にぶち込むというエネルギーの無駄遣い的プログラム。


Ascii限定。エラーチェックも無し。mallocの前に付ける(char *)は、標準Cだとやらなくてもいいらしいんで抜かしてみた。
一発で動いたんでバグ調べてないです。考えつくのは、ゼロを入れても何も表示されないだろうなとか、そういや負の数には対応していないとかか。気づいてしまったんで後で対応します。
そういえば、ASCII_ZEROって、たんに'0'と書けば良かったな、と今ごろ気づく。
他にもなんかあったら教えてください。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define SIZE 30
#define ASCII_ZERO 48

int main(int argc, char *argv[]){
  int index;
  int revarr[SIZE];
  int i=0, tmp;
  int x = atoi(argv[1]);      /* HACK: error check, better solution */

  char *output;

  while(x){
    tmp = x/10;
    revarr[i] = x - tmp*10;
    i++;
    x=tmp;
  }

  tmp = i;

  output = malloc(tmp+1);
  output[tmp]='\0';

  for(i=0; i<tmp; i++){
    output[i] = (char)(ASCII_ZERO + revarr[tmp-i-1]);
  }

  printf("the number is : %s", output);
  
}

割り算かけ算両方やるのはあまり良くないかも知れないですけどね。
スタック使う必要は特にないと思います><*1

*1:revarr[]がスタックだと言えばそれまでだけど