Título: Porque no puedo pasarle la direccion de la cadena? strtol Publicado por: 7emiliosk8 en 11 Febrero 2017, 22:39 pm Hola tengo este codigo, se supone que la funcion strtol recibe u puntero doble, pero se supone que la cadena "prueba" es un puntero que apunta ala direccion de memoria del primer elemento de la cadena, o sea es como si le estuviera pasando la dir de un puntero, no se si me explico , de todos modos no me funciona :/ da un warning
Código
Título: Re: Porque no puedo pasarle la direccion de la cadena? strtol Publicado por: class_OpenGL en 11 Febrero 2017, 22:57 pm Lo que no puedes hacer es pasarle la dirección de un arreglo. Conceptualmente no puedes porque no puedes modificar la dirección de un arreglo.
Nota por si quieres sumar conocimientos (conocimientos obtenidos experimentalmente con el compilador MinGW y MinGW-w64): físicamente no puedes porque un arreglo no guarda una dirección de memoria. En realidad, un arreglo no se almacena en memoria. Al referirte a un elemento del arreglo, el compilador sabe la dirección virtual del primer elemento del arreglo, y por tanto sabe la del elemento. Cuando intentas acceder a la dirección de un arreglo, la dirección que obtienes es la misma dirección del primer elemento del arreglo. Código que lo demuestra: Código
Resultado en pantalla: Código: El arreglo apunta a: 000000000023FE10 Espero que se haya entendido Título: Re: Porque no puedo pasarle la direccion de la cadena? strtol Publicado por: 7emiliosk8 en 11 Febrero 2017, 23:11 pm Hola gracias por responder, pero con strtol no estoy modificando la direccion del puntero simplemente llenandolo. poniendo caracteres dentro
Ademas yo lei en una parte que decia, "los arreglos se puede decir que son punteros disfrazados" ya que el nombre de un arreglo es un puntero a la direccion de memoria del primer elemento del arreglo (que es la misma dir del arreglo), es por eso que cuando si tengo char prueba[20]; char *p ; puedo usar %s de la misma forma que en ambos, printf("%s y %s",prueba,p); porque prueba se comporta como un puntero. me explico ? entonces no entiendo porque aca no se puede pasar la dir de memoria del arreglo Título: Re: Porque no puedo pasarle la direccion de la cadena? strtol Publicado por: class_OpenGL en 11 Febrero 2017, 23:16 pm Hola gracias por responder, pero con strtol no estoy modificando la direccion del puntero simplemente llenandolo. poniendo caracteres dentro No, una de las cosas que hace strtol es guardarte en la dirección que le pasas la dirección del primer elemento después del número. "los arreglos se puede decir que son punteros disfrazados" Eso se dice para facilitar la comprensión de sintaxis de los arreglos, pero la realidad es la que dije. Un arreglo NO es lo mismo que un puntero. Lo único similar entre ellos es su sintaxis. Título: Re: Porque no puedo pasarle la direccion de la cadena? strtol Publicado por: 7emiliosk8 en 11 Febrero 2017, 23:56 pm No, una de las cosas que hace strtol es guardarte en la dirección que le pasas la dirección del primer elemento después del número. No te entendi eso muy bien amigo, cuando dices "la direccion del primer elemento despues del numero" podrias detallarlo un poco mas, graciass Título: Re: Porque no puedo pasarle la direccion de la cadena? strtol Publicado por: class_OpenGL en 12 Febrero 2017, 00:16 am Lo que decía hace esto:
1º Se salta todos los espacios que haya en la cadena que le pasas. 2º Te lee y convierte los digitos del numero hasta que se encuentre uno que no sea dígito o cuando llegas al final de la cadena. 3º Te devuelve, además del número, la dirección del primer elemento que se ha encontrado que no es dígito. Código de ejemplo: Código
Salida: Código: El numero convertido: 124 Como ves, strtol te ha convertido bien el número. Lo que decía es que strtol lee dígitos hasta que se encuentre uno que no lo sea. En nuestro ejemplo ("124lo que sea"), strtol lee carácter a carácter. '1' es dígito, convierte y continúa. '2' es dígito, convierte y continúa. '4' es dígito, convierte y continúa. 'l' no es dígito, por lo que para ahí, y devuelve la dirección (que pertenece al arreglo) del elemento 'l'. Como se puede ver en el segundo fprintf, este elemento es el 3. Nota un poco más técnica: te puedes fijar en el detalle de que la dirección de "siguiente" menos la del arreglo es 3, lo que quiere decir que "siguiente" apunta a 3 bytes más allá del arreglo, y como el arreglo tiene 14 elementos, eso significa que "siguiente" apunta a un elemento del arreglo. Esto deja claro que no se usa memoria dinámica. Título: Re: Porque no puedo pasarle la direccion de la cadena? strtol Publicado por: 7emiliosk8 en 12 Febrero 2017, 01:26 am grnde hermano , muchas gracias, me quedo claro
Título: Re: Porque no puedo pasarle la direccion de la cadena? strtol Publicado por: 7emiliosk8 en 12 Febrero 2017, 02:37 am Amigo, mira comente mi codigo, segun lo que tu me explicaste, me podrias decir si esta correcto
Código
Título: Re: Porque no puedo pasarle la direccion de la cadena? strtol Publicado por: class_OpenGL en 12 Febrero 2017, 02:41 am Sabiendo que esto era el error,
Código
Está todo bien. ______________________________________________ Si quieres más información de strtol, te aconsejo visitar el siguiente link: http://www.cplusplus.com/reference/cstdlib/strtol/ (http://www.cplusplus.com/reference/cstdlib/strtol/) Título: Re: Porque no puedo pasarle la direccion de la cadena? strtol Publicado por: 7emiliosk8 en 12 Febrero 2017, 02:55 am era para saber si estaba bien la logica del porque da ese error XDD pero gracias de todos modos
|