2010-07-14 8 views
7

Así que como todos sabemos, el atoi convierte un carácter en un número. Pero, ¿qué haces si solo quieres uno de los elementos de la matriz en lugar de toda la matriz?¿Cómo se usa atoi para asignar elementos individuales de una matriz de caracteres?

Por favor, mira el siguiente:

for (h = 0; h < 5; h++) 
{ 
    num[h] = atoi(temp[h]); 
} 

Supongamos que num es un array de tipo int y que es temp y matriz de tipo char. Esto me da uno de esos problemas de conversión molestos:

conversión no válida del 'carbón' a 'const char *'

¿Alguna sugerencia sobre cómo convertir un solo elemento de una matriz de caracteres a un int usando atoi?

Respuesta

13

Si sólo desea convertir un solo carácter que no es necesario utilizar atoi():

if (temp[h] >= '0' && temp[h] <= '9') 
{ 
    num[h] = temp[h] - '0'; 
} 
else 
{ 
    // handle error: character was not a digit 
} 

En C, el valor de cada dígito es uno mayor que el valor de la cifra anterior, por lo que este se garantiza que funciona.

La razón por la que atoi() no funciona es porque toma como argumento const char*, no como char. Ese puntero debe apuntar a una cadena terminada nula.

+0

Ok ... Puede necesaria para convertir el uso de atoi(). Gracias. –

+0

@kriss: ¡gracias por el punto y coma! Oops! –

+0

C no define la codificación de caracteres, por lo que no está "garantizado que funcione". Está asumiendo que la codificación de caracteres es ASCII (o tiene la propiedad deseada), lo cual es quizás una suposición razonable, pero es importante saber que es una suposición, no una garantía. – user85509

5

Además de simplemente utilizando su valor integral como se muestra por James, se puede poner en un búfer separado:

char buf[2] = { temp[h], '\0' }; 
num[h] = atoi(buf); 
Cuestiones relacionadas