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);