Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - eduu15

#1
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
#3
Acabo de hacer la prueba y no se esta sobreescibiendo probado en windows y ubuntu curioso el tema
#4
Estaba repasando el code y me surgio una duda. Porque otro free en main?
CitarCode original

    #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
No entiendo muy bien este concepto y he estado pensando acerca del tema.
CitarAclarar que el codigo funciona pero no estoy seguro de que sea correcto



#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
Modifique la pregunta añadi otro codigo que creo que funciona de suerte pero funciona
#8
Citartengo este code y el problema es que solo me imprime una h
#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?


}


CitarY porque este funciona?
#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
Yo uso codeblocks y tambien lo hace, creo que lo hacen todos.
Llego 6 años despues a la respuesta pero bueno...
#10
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.