Duda sobre código

Iniciado por Xenomorfo77, 6 Mayo 2012, 06:09 AM

0 Miembros y 1 Visitante están viendo este tema.

Xenomorfo77

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é?

#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
   
   
   int nElementos = 0;
   char *PnElementos = NULL;
   int i = 0;
       
   
   printf("Numero de elementos de la matriz: ");
   scanf("%d",&nElementos);
   printf("ELEMENTOS: %d",nElementos);
   Sleep(2000);
   PnElementos = (char*)malloc((nElementos + 1) * sizeof(int));
   
   for(i=0;i<nElementos;i++)
   {
                            PnElementos[i]='f';
                            printf("Valor de elemento(%d) = %c\n",i,PnElementos[i]);
   }
    PnElementos[i]='\0';
   printf("Total elementos matriz = %d",strlen(PnElementos));
   Sleep(5000);
   ofstream fichero;
   fichero.open("archivo.txt");
   fichero << PnElementos;
   free(PnElementos);
   fichero.close();
   
   
}

durasno

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
Ahorrate una pregunta, lee el man

linkingcrk

CitarInsertar 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...

Xenomorfo77

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.

durasno

El problema es q strlen espera una cadena. Toda cadena termina con el caracter '\0', es por esto q strlen devolvia mal...
Agrega:
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
Ahorrate una pregunta, lee el man

Xenomorfo77

Cita de: 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:
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.

durasno

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
Ahorrate una pregunta, lee el man

Xenomorfo77

Cita de: 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

Entendido, gracias.