Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/05/2010, 04:49
pixaaa
 
Fecha de Ingreso: mayo-2010
Mensajes: 2
Antigüedad: 14 años, 6 meses
Puntos: 0
Problema con memoria dinamica

Hola! es la primera vez que escribo en un foro pero ya estoy desesperado, no encuentro nada, nose alomejor ignoro algo porque es la primera vez que estava probando con memoria dinamica.
El problema es el siguiente:

mi programa lo que debe hacer es ir leiendo de un fichero linias y irlas concatenando dentro de un puntero al que le e asignado memoria dinamica, pero cuando lo concateno, el primer DNI que me introduce me lo introduce con valor basura, o alomejor es la memoria que le he asignado o algo...pero yo quiero que solo almacene los campos que yo quiero, que en mi caso son DNI, NOMBRE, APELLIDOS, etc... sin embargo cuando printo me sale.. È[é455245N <-- DNI con valor basura o lo que sea el valor ese que coge. Me lo coge despues de asignarle el malloc.. nose.. seguro que es por ignorancia pero no se como solucionarlo. este es el codigo gracias:

Código:
void modifica_datos(CLIENTE clientes, FILE *file){
     char dni[N];
     int memoria=0;
     char *fichero_mod;   //Puntero donde almaceno toda el fichero nuevo
     long nBytes=0;
     long nBytes2=0;
     char cadena_cop[M];  //Cadena de fichero encontrada
     char * ficha;         //Puntero para funcion strtok
     char lectura_inf[M];  //Cadena de fichero encontrada
     char c='\x087';       //Para adre"ç"a
     char num_str[N];
     char *aux;   //Puntero donde almaceno linia nueva modificada
     long nBytes_aux=0;
     int comp=1;           //0 si es igual y otro num si es dif.
     FILE *file2=NULL;
     //----------------------------->PIDE DNI A MODIFICAR y COMPRUEVA SI EXISTE O NO<---------------------------
     printf("Introdueix el DNI del client a modificar: ");
     gets(clientes.dni);
     while(buscar_dni(clientes, &memoria, dni) != 0){
                 system("cls");
                 printf("\nDNI NO EXISTENTE!!!");
                 printf("\nIntrodueix el DNI del client a modificar: ");
                 gets(clientes.dni);
     }
     //----------------------------->VAMOS AL FINAL DEL FICHERO Y CONTAMOS BYTES<---------------------------
     fseek(file,0,SEEK_END);
     nBytes = ftell(file);
     fichero_mod=(char*)malloc(sizeof(char)*nBytes);//Asignamos memoria al puntero
                                                                printf("%d",nBytes);
  printf("-->%sVALOR BASURA<--",fichero_mod);
          system("pause");
file2 = fopen("index.txt","r");
    if(file2==NULL){
                   printf("\nError al obrir l'arxiu\n");
    }
    
    //-------------------->ASIGNAMOS LINIA A LINIA MIENTRAS NO SEA LA LINIA A MODIFICAR<--------------------
    rewind(file);
    while ( !feof(file2) ){
        fscanf(file2,"%s %d\n", dni, &memoria);// almacena dni y bytes
        comp = strcmpi(clientes.dni, dni);//Si devuelve 0 es existe
        if (comp != 0){
               fgets(cadena_cop, 400, file);//Copia linia de clientes.txt
               printf("\n\n\n%s\n\n", cadena_cop);
               printf("%s",fichero_mod);
               strcat(fichero_mod, cadena_cop);//Concatena cada linia introducida  
        }
        if (comp == 0){
                 break;
              }
    }
    fclose(file2);