elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Punteros a cadenas dinamicas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Punteros a cadenas dinamicas  (Leído 7,896 veces)
eduu15

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: Mostrar una cadena sin especificar su tamaño
« Respuesta #10 en: 8 Abril 2018, 02:15 am »

Y se podria guardar la salida de getchar?



He cambiado el titulo de la pregunta "Arrays de caracteres dinamicos" pero no se si estara bien porque en realidad serian punteros a cadenas dinamicas si no me equivoco



 Volvi a cambiar el titulo ahora creo que esta bien y es mas claro corrijanme si me equivoco



Que lio con el titulo...



Otra pregunta MAFUS perdona por hacer tantas... porque ret_val y str no son un puntero doble **ret_val **str como en este code: https://foro.elhacker.net/programacion_cc/punteros_a_cadenas_dinamicas-t482323.0.html;msg2159182#msg2159182



En total son 3 preguntas:
1-Y se podria guardar la salida de getchar?
2-el dichoso titulo de la pregunta
3-La del puntero doble



[MOD] No hacer quintuple post, se usa el botón "modificar" para añadir comentarios.


« Última modificación: 8 Abril 2018, 03:31 am por simorg » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Punteros a cadenas dinamicas
« Respuesta #11 en: 8 Abril 2018, 03:21 am »

Bien, antes de nada y siguiendo las reglas del foro, no debe hacer publicaciones seguidas. Si no ha habido respuestas posteriores y quieres actualizar tu mensaje debes ir al botón 'editar' de tu último mensaje del hilo y allí añadir las novedades.

Respondiendo a tus preguntas:
1. Sí, se puede guardar la salida de getchar. Fíjate que aquí se hace
Código:
while((c=getchar())!='\n') {

2. El título está bien

3. En el código que has apuntado es puntero doble porque guarda una lista de cadenas cuando en el último el que te he hecho solo guarda una única cadena.


En línea

eduu15

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: Punteros a cadenas dinamicas
« Respuesta #12 en: 11 Abril 2018, 00:47 am »

Estaba repasando el code y me surgio una duda. Porque otro free en main?
Citar
Code original

Código:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    char* string_input() {
        char *ret_val; // cadena que será devuelta
        char *str = NULL; // cadena auxiliar para conseguir datos del teclado
        char c;
        const unsigned chunk = 10; // tamaño de trozos de memoria en bytes o caracteres
        int i=0; // posición del cursor en str
     
        while((c=getchar())!='\n') { // adquisición por teclado
            if(i%chunk == 0) // si i ha alcanzado el máximo de memoria
                str=realloc(str, i+chunk); // añadirle más
            str[i] = c; // copiar el caracter adquirido a la cadena
            ++i; // avanzar el puntero en str
        }
        if(i%chunk == 0) // si i ha alcanzado el máximo de memoria
            str=realloc(str, i+1); // añadir un byte más a str
        str[i] = '\0'; // cerrar la cadena
     
        ret_val = malloc(strlen(str)+1); // dimensionar la cadena de regreso con el tamaño exacto
        strcpy(ret_val, str); // copiar la cadena
     
        free(str); // borrar la cadena auxiliar
     
        return ret_val; // devolver la cadena resultado
    }
     
    int main(void) {
        char *str;
     
        printf("> ");
        str = string_input();
     
        printf("%s", str);
     
        free(str); //Porque este free? Para liberar ret_val?
    }
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Punteros a cadenas dinamicas
« Respuesta #13 en: 11 Abril 2018, 09:19 am »

El fred que hay en string_input es para su variable local str. Ahora subte fijas en esa misma función se dimensiona otra variable, ret_val, que no es liberada, sino que su dirección a la que apunta es pasada a str de main y por tanto ahora es main la encargada de liberar esa memoria.
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
JTable tamaño de celdas ajustable y mostrar texto completo
Java
marvic 1 29,571 Último mensaje 12 Abril 2009, 19:57 pm
por marvic
Problema con el tamaño de una estructura y/o cadena en Dev-C++
Programación C/C++
BlerofonT 4 3,458 Último mensaje 8 Abril 2018, 10:52 am
por eduu15
subir y mostrar las imagenes en un mismo tamaño.
PHP
luispolobenites 1 1,955 Último mensaje 16 Octubre 2014, 20:02 pm
por Beakman
Mostrar la cantidad de veces que una cadena se repite
Programación C/C++
andoporto 1 3,201 Último mensaje 9 Febrero 2015, 08:10 am
por eferion
Especificar una cadena de caracteres para invoke en MASM32.
ASM
Usuario887 2 3,311 Último mensaje 21 Febrero 2021, 22:18 pm
por Usuario887
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines