Si necesita tener en cuenta los números negativos, es posible que necesite alguna lógica adicional. De hecho, cuando juegas con las matrices, no conoces el tamaño inicial, es posible que desees hacer más comprobaciones de seguridad, y agregar una API para manejar la estructura de los datos también es muy útil.
// returns the number of digits converted
// stores the digits in reverse order (smalles digit first)
// precondition: outputdigits is big enough to store all digits.
//
int convert(int number, int* outputdigits, int* signdigit) {
int* workingdigits = outputdigits;
int sign = 1;
if(number < 0) { *signdigit = -1; number *= -1; }
++workingdigits;
for (; number > 0; ++ workingdigits) {
*workingdigits = number % 10;
number = number/10;
}
return workingdigits - outputdigits;
}
void printdigits(int* digits, int size, int signdigit) {
if(signdigit < 0) printf("-");
for(int* digit = digits+size-1; digit >= digits; --digit){
printf("%d", *digit);
}
}
int main() {
int digits[10];
int signdigit;
printdigits(digits, convert(10, digits, &signdigit), signdigit);
printdigits(digits, convert(-10, digits, &signdigit), signdigit);
printdigits(digits, convert(1005, digits, &signdigit), signdigit);
}
¿por qué esta función es un puntero de char? ¿Y qué hace el nuevo char [length]? Parece un puntero al primer índice de la matriz, pero a mi compilador no parece gustarle 'new char' – droseman
'new char' es C++ speak. La forma correcta de hacerlo en C es el segundo bit de código. –
Además, es importante que, al final de su programa, llame a 'free()' en cualquier arreglo que haya obtenido de esta función. De lo contrario, se pierde memoria. –