2012-03-07 27 views
6

Disculpe si esta es una pregunta súper fácil, pero soy muy nuevo en C. Quiero ser capaz de convertir char * s en dobles y ints y Parece que no puede encontrar una explicación sobre cómo.Cómo se hace un char * a un int o un doble en C

Edit: Estoy leyendo en la entrada del usuario, que es un char *. La mitad de la entrada que quiero convertir, digamos, "23" a 23 y la mitad de, por ejemplo, "23.4" a 23.4.

+0

¿Quiere decir emitir o convertir? En otras palabras, ¿desea convertir '" 42 "' en el número '42' o tratar la memoria con los puntos' char * 'como' int' – JaredPar

+0

Puede encontrar código de trabajo sobre cómo usar 'strtol()' [aquí] (http://stackoverflow.com/a/2729534/50049), estoy cerrando esto como demasiado localizado porque no estaba seguro del problema al que se enfrentaba. –

Respuesta

2

Estrictamente hablando, puede hacer esto: (int) puntero.

Sin embargo, probablemente esté buscando las funciones atoi y atof.

atoi es una función que convierte un carácter * que apunta a una cadena que contiene un número entero en decimal a un número entero.

atof es igualmente para el doble.

+2

La familia de funciones 'strtol()' se recomienda sobre 'atoi()', solo porque 'atoi()' devuelve lo mismo cuando falla y cuando analiza '0'. –

+1

'atoi()' no hace ningún error al verificar en absoluto. 'strtol()' maneja los errores, establece errnos significativos e incluso copia la basura encontrada en la entrada para una inspección posterior. –

+0

Cierto, pero atoi está más cerca del equivalente de la cadena de conversión en enteros en lenguajes de nivel superior. – Joshua

13

Usted puede emitir un char* así:

char *c = "123.45"; 
int i = (int) c;  // cast to int 
double d = (double) c; // cast to double 

Pero eso va a dar resultados sin sentido. Simplemente fuerza el puntero para que se trate como un número entero o doble.

presumo lo que quiere es de análisis (En lugar de jugar) el texto en un int o double. Intente esto:

char *c = "123.45"; 
int i = atoi(c); 
double d = atof(c); 
+0

¡Gracias! Esto es exactamente lo que quiero! – user1231120

+2

(hablando solo como un usuario aquí, no como un mod) 'atoi()' no es seguro. –

Cuestiones relacionadas