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

 

 


Tema destacado: Estamos en la red social de Mastodon


  Mostrar Mensajes
Páginas: [1] 2
1  Programación / Programación C/C++ / Re: No devolver nunca punteros a variables locales a una función en c en: 11 Abril 2018, 15:52 pm
Entonces la conclusion es que aunque el SO te lo permita mejor no hacerlo

Aunque la primera funcion no tenga sentido ya que devuelve un int no un puntero a int esta parte

return *puntero; es como si hiciese return resultado no? estaria desreferenciando el puntero
2  Programación / Programación C/C++ / Re: No devolver nunca punteros a variables locales a una función en: 11 Abril 2018, 09:07 am
Ok, gracias Yuki
3  Programación / Programación C/C++ / Re: No devolver nunca punteros a variables locales a una función en: 11 Abril 2018, 00:50 am
Acabo de hacer la prueba y no se esta sobreescibiendo probado en windows y ubuntu curioso el tema
4  Programación / Programación C/C++ / Re: Punteros a cadenas dinamicas 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?
    }
5  Programación / Programación C/C++ / No devolver nunca punteros a variables locales a una función en c en: 11 Abril 2018, 00:35 am
No entiendo muy bien este concepto y he estado pensando acerca del tema.
Citar
Aclarar que el codigo funciona pero no estoy seguro de que sea correcto



Código:
#include <stdio.h>

int* funcion ()
{
    int resultado=9; //variable local de la funcion, al acabar la funcion se pierde el dato
    int*puntero=&resultado; //cuando termine la funcion puntero no sabra a donde apuntar

    return *puntero; //devuelvo el valor de resultado
}

int main(int argc, char *argv[])
{
    int* p=funcion();
    printf("%i",p); //9

    return 0;
}

Si he comentado mal el programa por favor comentenlo, yo creo que aunque funcione seria incorrecto, porque una vez acabe la funcion, puntero no sabra a donde apuntar y podrian sobreescribirse direcciones de memoria. Ustedes que opinan?
6  Programación / Programación C/C++ / Re: Devolver una cadena pasada como argumento a una funcion en: 9 Abril 2018, 02:32 am
Modifique la pregunta añadi otro codigo que creo que funciona de suerte pero funciona
7  Programación / Programación C/C++ / Re: Devolver una cadena pasada como argumento a una funcion en: 9 Abril 2018, 01:56 am
Gracias
8  Programación / Programación C/C++ / Devolver una cadena pasada como argumento a una funcion en: 9 Abril 2018, 01:26 am
Citar
tengo este code y el problema es que solo me imprime una h
Código:
#include <stdio.h>

char imprimir_cadena(const char *cadena2);

int main(){

   const char *ptr="hola";

   const char *p=imprimir_cadena(ptr);

   printf("%s",&p);

   return 0;

}

char imprimir_cadena(const char *cadena2){

    return *cadena2; //el asterico * es opcional?


}

Citar
Y porque este funciona?
Código:
#include <stdio.h>

char imprimir_cadena(const char *cadena2);

int main(){

   const char *ptr="hola";

   const char *p=imprimir_cadena(ptr);

   printf("%s",(&p)[1]); //esta parte no la entiendo

   return 0;

}

char imprimir_cadena(const char *cadena2){

    return cadena2;


}
9  Programación / Programación C/C++ / Re: Problema con el tamaño de una estructura y/o cadena en Dev-C++ en: 8 Abril 2018, 10:52 am
Yo uso codeblocks y tambien lo hace, creo que lo hacen todos.
Llego 6 años despues a la respuesta pero bueno...
10  Programación / Programación C/C++ / Re: Mostrar una cadena sin especificar su tamaño 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.
Páginas: [1] 2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines