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ú

Temas - eduu15

#1
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?
#2
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;


}
#3
-La idea que tenia que no la he podido implementar pero dudo que se pueda, es que al pedir un nombre y apellido al usuario a priori NO SABEMOS cual va a ser la longitud de stdin que teclee el usuario. En la linea del malloc puse 10 por poner como pude haber puesto 20 pero en realidad no se cuanto va a ocupar el nombre y el apellido que me ingrese el usuario por teclado no se como implementarlo de tal manera que cuando se teclee un nombre y un apellido se calcule la longitud y luego ya reservar memoria para esa longitud a parte tambien para reservar la memoria justa y necesaria para lo que me teclee el usuario y no andar a ciegas suponiendo que va ingresar un nombre y apellido de 10,20,30 etc bytes

-Como no me salio la idea hice esto que no se parece en nada a mi idea y que aun por encima no consigo hacer que funcione
Espero haberme explicado con claridad y gracias
CitarPrimera duda, porque el codigo no funciona?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void){
   char *nombre,*nombre2;
   nombre=malloc(10*sizeof(char)); //reservo 10 bytes
   printf("Introduce tu nombre y apellido: ");

   fgets(nombre,9,stdin); //agrega NULL y \n si se ingresan menos caracteres
   if (nombre[strlen(nombre)-1] == '\n'){
       nombre[strlen(nombre)-1] = '\0';
   }

   printf("%s\n",nombre);

   long int longitud=(strlen(nombre)+1); //strlen no cuenta el NULL de final de cadena
   printf("%li\n",longitud);

   if(longitud>8){
      nombre2=realloc(nombre,15*sizeof(char)); //reasigno 5 bytes
      printf("%s\n",nombre);
      free(nombre2);

    }
    free(nombre);


   return 0;
}


CitarSegunda duda, seria posible hacer la idea?