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

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda sobre código
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda sobre código  (Leído 2,783 veces)
Xenomorfo77

Desconectado Desconectado

Mensajes: 61


Ver Perfil
Duda sobre código
« en: 6 Mayo 2012, 06:09 am »

Tengo un problema en este código, el puntero es una matriz a la que le doy a cada elemento el valor 'f', el problema esta en cuando lo imprimo al archivo. El total de elementos no se corresponde con el tamaño elegido. Por ejemplo si pongo 100, me imprime 100 'f' mas basura que no se porque sale.¿Alguien sabe porqué?
Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <windows.h>
  4. #include <cstdlib>
  5. #include <iostream>
  6. #include <fstream>
  7.  
  8. using namespace std;
  9.  
  10. int main()
  11. {
  12.  
  13.  
  14.    int nElementos = 0;
  15.    char *PnElementos = NULL;
  16.    int i = 0;
  17.  
  18.  
  19.    printf("Numero de elementos de la matriz: ");
  20.    scanf("%d",&nElementos);
  21.    printf("ELEMENTOS: %d",nElementos);
  22.    Sleep(2000);
  23.    PnElementos = (char*)malloc((nElementos + 1) * sizeof(int));
  24.  
  25.    for(i=0;i<nElementos;i++)
  26.    {
  27.                             PnElementos[i]='f';
  28.                             printf("Valor de elemento(%d) = %c\n",i,PnElementos[i]);
  29.    }
  30.    PnElementos[i]='\0';
  31.    printf("Total elementos matriz = %d",strlen(PnElementos));
  32.    Sleep(5000);
  33.    ofstream fichero;
  34.    fichero.open("archivo.txt");
  35.    fichero << PnElementos;
  36.    free(PnElementos);
  37.    fichero.close();
  38.  
  39.  
  40. }
  41.  


« Última modificación: 6 Mayo 2012, 21:42 pm por Xenomorfo77 » En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Duda sobre código
« Respuesta #1 en: 6 Mayo 2012, 17:51 pm »

Hola! el problema es que estas haciendo un sizeof(int) en el malloc, de esta forma estas reservando 100 int y no 100 char, es por eso que imprime basura demas. Deberia ser sizeof(char) para tener un arreglo de 100 caracteres

Saludos


En línea

Ahorrate una pregunta, lee el man
linkingcrk

Desconectado Desconectado

Mensajes: 15



Ver Perfil WWW
Re: Duda sobre código
« Respuesta #2 en: 6 Mayo 2012, 17:57 pm »

Citar
Insertar Cita
Hola! el problema es que estas haciendo un sizeof(int) en el malloc, de esta forma estas reservando 100 int y no 100 char, es por eso que imprime basura demas. Deberia ser sizeof(char) para tener un arreglo de 100 caracteres

Saludos

te me adelantastes   :¬¬  justo le estaba respondiendo cuando tu le respondistes  :laugh:


Xenomorfo. los char ocupan 1 Byte y los Int 4 te recomiendo repasar estas cosas...
En línea

Xenomorfo77

Desconectado Desconectado

Mensajes: 61


Ver Perfil
Re: Duda sobre código
« Respuesta #3 en: 6 Mayo 2012, 20:06 pm »

Hola, gracias a los dos pero lo cierto es que ya lo había probado, aunque le ponga sizeof(char) me sigue fallando. Pruebenlo en sus maquinas por ejemplo con 100, cuando llega a la línea que imprime el total de elementos de la matriz me da 103 en vez de 100 por lo cual me impre 100 'f' y 3 caracteres basura.
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Duda sobre código
« Respuesta #4 en: 6 Mayo 2012, 21:31 pm »

El problema es q strlen espera una cadena. Toda cadena termina con el caracter '\0', es por esto q strlen devolvia mal...
Agrega:
Código
  1. PnElementos[i]='\0';
despues del for(ahi tendria q andar bien y usa char en el sizeof). Ademas la condicion del for debe ser i<nElementos-1; ya que el '\0' va  a ocupar el espacio 99 o podrias reservar 101 char en ves de 100

Saludos
En línea

Ahorrate una pregunta, lee el man
Xenomorfo77

Desconectado Desconectado

Mensajes: 61


Ver Perfil
Re: Duda sobre código
« Respuesta #5 en: 6 Mayo 2012, 21:41 pm »

El problema es q strlen espera una cadena. Toda cadena termina con el caracter '\0', es por esto q strlen devolvia mal...
Agrega:
Código
  1. PnElementos[i]='\0';
despues del for(ahi tendria q andar bien y usa char en el sizeof). Ademas la condicion del for debe ser i<nElementos-1; ya que el '\0' va  a ocupar el espacio 99 o podrias reservar 101 char en ves de 100

Saludos

Muchas gracias durasno, creia que el '\0' se agregaba solo al llegar al ultimo elemento. Solucionado gracias de nuevo. Modifico el code y lo dejo bien por si a alguien le sirve. Un saludo.
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Duda sobre código
« Respuesta #6 en: 6 Mayo 2012, 21:46 pm »

De nada :)... cuando usas funciones q manejan cadenas(ej: scanf, fgets...),el  caracter '\0' si se agrega solo, pero cuando usas bucles para crear algo como vos hicist, lo tenes q agregar

Saludos
En línea

Ahorrate una pregunta, lee el man
Xenomorfo77

Desconectado Desconectado

Mensajes: 61


Ver Perfil
Re: Duda sobre código
« Respuesta #7 en: 6 Mayo 2012, 21:49 pm »

De nada :)... cuando usas funciones q manejan cadenas(ej: scanf, fgets...),el  caracter '\0' si se agrega solo, pero cuando usas bucles para crear algo como vos hicist, lo tenes q agregar

Saludos

Entendido, gracias.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda sobre generar código en textbox
Programación Visual Basic
julietth 2 2,248 Último mensaje 4 Abril 2009, 18:26 pm
por julietth
Duda sobre codigo
Programación C/C++
javituni 5 2,404 Último mensaje 13 Abril 2013, 18:01 pm
por javituni
Duda sobre cierto código en C
Programación C/C++
valthomous 1 1,491 Último mensaje 25 Mayo 2014, 15:24 pm
por rir3760
Duda sobre código
Java
Genvi 1 1,568 Último mensaje 12 Diciembre 2015, 23:10 pm
por DarK_FirefoX
Duda sobre una linea en mi codigo que no funciona
Programación C/C++
miguevv 6 2,385 Último mensaje 11 Agosto 2018, 03:31 am
por miguevv
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines