Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Mozzard en 6 Diciembre 2018, 15:12 pm



Título: Alguien sabe que falla en este programa?? --> Funcion malloc
Publicado por: Mozzard en 6 Diciembre 2018, 15:12 pm
Pues en vez de mostrar en pantalla el puntero que ocupa menos memoria, me pone algo estilo --> Eh0 <--
Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
printf("Introduzca su nombre: ");
char nombre[20],*p_nombre;
int longitud=strlen(nombre);
gets(nombre);
p_nombre=(char*)malloc((longitud+1)*sizeof(char));
printf("%s",p_nombre);
}


Título: Re: Alguien sabe que falla en este programa?? --> Funcion malloc
Publicado por: K-YreX en 6 Diciembre 2018, 16:25 pm
Has creado un puntero a <char>. Como su nombre indica un puntero apunta y el tuyo no apunta a ningún sitio. Lo que haces con <malloc> es reservar espacio en ese puntero pero en este caso ya tienes una cadena C que es <nombre> entonces con hacer que <p_nombre> apunte a <nombre> ya está.
Código
  1. int main(){
  2. printf("Introduzca su nombre: ");
  3. char nombre[20],*p_nombre;
  4. fgets(nombre, 20, stdin);
  5. p_nombre = nombre;
  6. printf("%s",p_nombre);
  7. }

Además de eso te he modificado la función <gets()> ya que es mejor usar <fgets()> y así especificar el número de caracteres que va a coger la función. De todos modos si lo dejas así e introduces 19 o 20 caracteres se te va a quedar el último o los dos últimos en el buffer ya que tienes capacidad para 20 caracteres pero tienes que contar el salto de línea "\n" cuando pulsas enter y el "\0" que indica el final de cadena.


Título: Re: Alguien sabe que falla en este programa?? --> Funcion malloc
Publicado por: Mozzard en 6 Diciembre 2018, 22:25 pm
Gracias por solicionarlo, pero la cosa es que estoy practicando la funciona malloc, por eso insisto en ponerlo en el programa. De esa forma reducir el espacio de la memoria que ocupa p_nombre


Título: Re: Alguien sabe que falla en este programa?? --> Funcion malloc
Publicado por: K-YreX en 6 Diciembre 2018, 22:33 pm
Para copiar por ejemplo los caracteres útiles de <nombre> en <p_nombre> puedes usar la función <strncpy()> que te permite introducir cuántos caracteres se van a copiar. Ya que el problema que tú estabas teniendo es que en ningún momento asignas un valor a <p_nombre>. No es lo mismo reservar espacio que asignar, primero haces hueco para meter algo, pero luego tienes que meter ese algo. Y recuerda al trabajar con memoria dinámica liberarla al terminar el programa. Suerte.


Título: Re: Alguien sabe que falla en este programa?? --> Funcion malloc
Publicado por: Mozzard en 6 Diciembre 2018, 22:39 pm
Solucionado!
Solo faltaba el strcpy, por eso no me imprimia el nombre que yo queria, un error tonto, pero como este codigo lo habia basado en otro que he visto no lo habre tenido en cuenta, y por eso me costaba tanto.
Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
printf("Introduzca su nombre: ");
char nombre[20],*p_nombre;
int longitud=strlen(nombre);
gets(nombre);
p_nombre=(char*)malloc((longitud+1)*sizeof(char));
strcpy(p_nombre,nombre);
printf("%s",p_nombre);
}