¿Cómo verificar la base de un número ingresado usando este progtwig?

Mi progtwig convierte el número introducido en una base deseada. Pero quiero comprobar la base actual del número. Por ejemplo: la base 1 es 3 y el número ingresado es 4, por lo que no es posible. Escribí la función para comprobar eso. Pero no funciona. ¿Dónde está mi culpa?

#include  #include  int check(int tmp_number , int source_base) { int check = 0 ; char msg[tmp_number]; sprintf(msg, "%d", tmp_number); int i=0; if(source_base>tmp_number) { return 1; } while( tmp_number ) { if(check<source_base) { check = tmp_number % 10 ; tmp_number /= 10 ; i++; } } if (sizeof(msg)==i) { return 1; } else { return 0; } } int main() { int tmp_number=1; int decimal=0; int source_base,target_base; char s[9]; int i=0; do { printf("Enter the base1\n"); scanf("%d",&source_base); printf("Enter the number\n"); scanf("%d",&tmp_number); } while (!check(tmp_number,source_base)); printf("Enter the base2\n"); scanf("%d",&target_base); while( tmp_number ) { decimal += (tmp_number % 10) * pow( source_base, i ) ; tmp_number /= 10 ; ++i ; } itoa(decimal, s, target_base); printf("The result is %s\n", s); getchar(); getchar(); return 1; } 

 char msg[tmp_number]; 

Crea una matriz realmente grande (el tamaño del valor de su número, no la longitud de su número), y sizeof(msg) == i solo será verdadero cuando el número sea exactamente 1 . Puedes arreglar tu código encontrando la longitud del número y creando una matriz de ese tamaño, pero sería mejor reescribirlo un poco así:

 int check(int tmp_number , int source_base) { int check; while( tmp_number ) { check = tmp_number % 10; tmp_number /= 10 ; if(check >= source_base) return 0; } return 1; }