Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Xenomorfo77 en 6 Mayo 2012, 06:09 am



Título: Duda sobre código
Publicado por: Xenomorfo77 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.  


Título: Re: Duda sobre código
Publicado por: durasno 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


Título: Re: Duda sobre código
Publicado por: linkingcrk 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...


Título: Re: Duda sobre código
Publicado por: Xenomorfo77 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.


Título: Re: Duda sobre código
Publicado por: durasno 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


Título: Re: Duda sobre código
Publicado por: Xenomorfo77 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.


Título: Re: Duda sobre código
Publicado por: durasno 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


Título: Re: Duda sobre código
Publicado por: Xenomorfo77 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.