Foros de daboweb

MULTIMEDIA, Video digital, Grabación, Diseño gráfico, Diseño web, Programación => Webmasters - Diseño Web - Programación - Diseño gráfico => Mensaje iniciado por: capsx en 21 de Marzo de 2005, 06:17:03 pm

Título: seguimos co la definiciones
Publicado por: capsx en 21 de Marzo de 2005, 06:17:03 pm
al ejecutar el siguiente codigo me da segmentation faul alguien me podsria decir porq es:

struct mensaje{
  char nombre[80];
  int borrar;
  int tamano;
};
 
struct buzonmensajes{
  int nummensajes;
  int mensporborrar;
  long tamanobuzon;
  FILE *fich;
  struct mensaje vectormensajes[100];
};

struct buzonmensajes buzon;

for (int i=0;i<20;i++){

strcpy(buzon.vectormensajes.nombre,nombre);
         
buzon.vectormensajes.tamano=tam;
}
         
Habra q reservar memoria? hago masl la asignacion? no lo se estoy basetante perdido si me pudieseis ayudar os lo agradeceria mucho.
Título: seguimos co la definiciones
Publicado por: BuHo en 23 de Marzo de 2005, 03:14:31 am
Código: [Seleccionar]
strcpy(buzon.vectormensajes[i].nombre,nombre);

el ultimo nombre, de donde lo copias???? No esta declarado en el codigo.

Y otra cosa, no estas programando en ANSI C.

En C no puedes declarar variables una vez has empezado la seccion de instrucciones. Te lo digo por eso de:

for (int i=0;  ...; ...)
Título: seguimos co la definiciones
Publicado por: capsx en 23 de Marzo de 2005, 09:51:33 am
Es que lo que os puse es solo un resumen del codigo de una funcion la función entera es la siguiente por si asi lo veis mejor y me podeis ayudar:

#include <string.h>
#include <sys/types.h>
#include <sys/file.h>
#include <errno.h>
#include <unistd.h>
#include <dirent.h>

struct mensaje{
  char nombre[80];
  int borrar;
  int tamano;
};
 
struct buzonmensajes{
  int nummensajes;
  int mensporborrar;
  long tamanobuzon;
  FILE *fich;
  struct mensaje vectormensajes[100];
};

**********************



int iniciobuzon(){

   struct dirent* elemento;
   int i = 0;
   char *nombre;
   char *aux;
   long tam;
   int numelementos=0;
   struct mensaje mens;

   // Abrimos el directorio mail
   DIR* inbox = opendir("mail");
   if (inbox == NULL)
      return 0;

   
   for (elemento=readdir(inbox); elemento!=NULL; elemento=readdir(inbox))
      numelementos++;
   
       rewinddir(inbox);
      
   // Creamos el buzón con los mensajes
   inicializarbuzon(numelementos-2);
   
   // Lo bloqueamos
   if(!bloquearbuzon()){
      return 0;
   }

   // Recorremos el contenido del directorio
      
   elemento = readdir(inbox);
   
   
   while (elemento!=NULL)
   {
      nombre=elemento->d_name;
      
      // No contamos con los directorio . y ..
      if ( nombre!="." && nombre!=".." ){   
      
         printf("el nombre del fichero es%s\n",nombre);         
         
         tam = tamanofich("mail", nombre);
         if (tam<0)
         {
            return 0;
         }
         buzon.tamanobuzon+=tam;
         buzon.vectormensajes.tamano=tam;
         printf("Empezamos a rellenar el vuzon\n");   
         strcpy(aux,"mail/");
         
         
         strcat(buzon.vectormensajes.nombre,nombre);
         
         printf("rellenamos el mensaje\n");
         buzon.vectormensajes.tamano=tam;
         
         

         i++;
      }

      elemento = readdir(inbox);
   }

   // Cerramos la lectura del directorio
   closedir(inbox);
   return 1;
}

muchas gracias por contestarme.
Título: seguimos co la definiciones
Publicado por: jirho en 05 de Abril de 2005, 06:27:09 pm
...cuando usas punteros lo mas conveniente es iniciaizarlos en NULL, no veo mas errores... :wink: ...