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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Alguien sabe que falla en este programa?? --> Funcion malloc
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Alguien sabe que falla en este programa?? --> Funcion malloc  (Leído 396 veces)
Mozzard

Desconectado Desconectado

Mensajes: 27


cout << "Text here" << endl;


Ver Perfil
Alguien sabe que falla en este programa?? --> Funcion malloc
« 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);
}


En línea

Código:
Programalo... sin miedo...
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 834



Ver Perfil
Re: Alguien sabe que falla en este programa?? --> Funcion malloc
« Respuesta #1 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.


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Mozzard

Desconectado Desconectado

Mensajes: 27


cout << "Text here" << endl;


Ver Perfil
Re: Alguien sabe que falla en este programa?? --> Funcion malloc
« Respuesta #2 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
En línea

Código:
Programalo... sin miedo...
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 834



Ver Perfil
Re: Alguien sabe que falla en este programa?? --> Funcion malloc
« Respuesta #3 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.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Mozzard

Desconectado Desconectado

Mensajes: 27


cout << "Text here" << endl;


Ver Perfil
Re: Alguien sabe que falla en este programa?? --> Funcion malloc
« Respuesta #4 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);
}
En línea

Código:
Programalo... sin miedo...
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines