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();
}
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
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...
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.
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
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.
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
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.