|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2000
Messaggi: 342
|
fread comportametno strano (linux)
ho un file pgm che inizia con i seguenti caratteri:
P5<spazio>768<spazio>576.<da qui iniziano i dati> devo caricare questo file in memoria .. ho fato una struttura con i campi ncols, nrows, data per settare i valori della struttura uso questo codice: Codice:
char *numero = (char*) malloc (5 * sizeof(char));
file2 = fopen("frame.pgm","r");
if (fseek(file2, 3, SEEK_SET)<0) {
perror("Errore nella seek del file2");
exit (1);
}
fread(numero, 3, sizeof(char), file2); //width
due.ncols = atoi(numero);
fread(numero, 4, sizeof(char), file2); //height
due.nrows = atoi(numero);
if (fseek(file2, 15, SEEK_SET) < 0) {
perror("Errore nella seek del file2");
exit (1);
}
due.data = (unsigned char*) malloc (due.ncols * uno.nrows * sizeof(unsigned char));
fread(due.data, uno.ncols*uno.nrows, sizeof(unsigned char), file2);
due.rowinc = due.ncols * sizeof(unsigned char);
fclose(file2);
allora ho provato a fare la prima fread leggendo 2 caratteri e mi restituisce "76" (correttamente) ho provato leggendo 4 caratteri e mi restituisce "768 " .... la soluzione che ho trovato è: deallocare numero prima di fare una nuova lettura da file, perchè la lettura del primo file settava numero a " 576" ... e quindi il 6 rimaneva a rompere le scatole ... la cosa strana è che ho provato anche usando memset ed impostando numero a '\0' ma mi dava lo stesso problema .... ciao Arpeda
__________________
Membro di HWU Scout Group || Quello che ieri era fantascienza oggi è realtà, quello che oggi è realtà domani sarà solo un ricordo ... Powered by Gentoo 1.4 on kernel 2.6.12.-gentoo-r4 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Re: fread comportametno strano (linux)
Codice:
fread(numero, 3, sizeof(char), file2); //width due.ncols = atoi(numero); numero[3] = '\0'; // Inserisce la terminazione stringa due.ncols = atoi(numero); Codice:
fread(numero, 4, sizeof(char), file2); //height due.nrows = atoi(numero); numero[4] = '\0'; // Inserisce la terminazione stringa due.nrows = atoi(numero+1); // salta lo spazio iniziale Questo solo per darti un'idea di quello che devi fare (ovviamente il codice scritto così è da fustigazione).
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2000
Messaggi: 342
|
si l'avevo fatto subito dopo aver postato
perchè è da fustigazione? cmq mi restitusce un valore sballato perchè la seconda fread del primo file legge 4 carattei quindi " 576" ed il 6 rimane quando leggo le 3 cifre del secondo file ciao Arpeda
__________________
Membro di HWU Scout Group || Quello che ieri era fantascienza oggi è realtà, quello che oggi è realtà domani sarà solo un ricordo ... Powered by Gentoo 1.4 on kernel 2.6.12.-gentoo-r4 Ultima modifica di Arpeda : 29-10-2003 alle 20:50. |
|
|
|
|
|
#4 | ||
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Quote:
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
||
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2000
Messaggi: 342
|
grazie per il suggerimento.
per la seconda parte del messaggio mi riferivo a _PRIMA_ che facessi numero[3]='\0'; ciao Arpeda
__________________
Membro di HWU Scout Group || Quello che ieri era fantascienza oggi è realtà, quello che oggi è realtà domani sarà solo un ricordo ... Powered by Gentoo 1.4 on kernel 2.6.12.-gentoo-r4 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:06.



















