NSA - Non Solo Amiga
SOFTWARE => Linguaggi di programmazione e scripting => Topic aperto da: raistlin77it - 30 Marzo 2014, 11:50:19
-
allora da un annetto non programmavo più, oggi mi sono messo a fare qualcosina, ma non funza nulla :)
la funzione incriminata è questa :
void Parse_Script(visual_novel_ *vn) {
char buffer[512];
char temp[512];
int i,q;
int lenght;
fgets (buffer, 512, vn->current_script->script);
printf("buffer letto = %s",buffer);
printf("risultato = %i\n",strncmp(buffer,"sound",5));
}
il risultato che ottengo letto da stdout è :
buffer letto =sound ~
risultato = 124
come è possibile che non ci sia corrispondenza tra i primi 5 caratteri di buffer e la stringa "sound" che metto io ?
-
quando fai queste cose metti sempre le stringhe tra quadre, cosi' ti accorgi subito come e' messa quella stringa
printf("buffer letto = [%s]",buffer);
puo' essere che buffer contenga \n o \r come ultimo carattere
in effetti c'è il carattere \n alla fine, però non dovrebbe influenzare i primi 5 caratteri che metto a confronto:)
anche con le quadre il risultato è :
buffer letto = [sound ~
]
risultato = 124
(ho messo una newline prima della scritta risultato per averla a capo)
e comunque le prime 5 lettere sono proprio sound, dovrei avere uno zero come risultato dalla strncmp
che sia il gcc 4.7.2?
-
allora modificando da così :
void Parse_Script(visual_novel_ *vn) {
char buffer[512];
char temp[512];
int i,q;
int lenght;
fgets (buffer, 512, vn->current_script->script);
printf("buffer letto = [%s]",buffer);
lenght=strlen(buffer);
printf("\nrisultato = %i\n",strncmp(buffer,"sound",5));
}
a così :
void Parse_Script(visual_novel_ *vn) {
char buffer[512];
char temp[512];
int i,q;
int lenght;
fgets (buffer, 512, vn->current_script->script);
printf("buffer letto = [%s]",buffer);
lenght=strlen(buffer);
printf("\nrisultato = %i\n",strncmp(buffer,"sound",5));
strcpy (temp,"sound");
q=0;
for (i=0;i<5;i++) {
if (buffer[i] == temp[i]) q++;
}
printf("q è = %i\n",q);
if (q==5) printf("le strighe sono uguali\n");
}
il risultato cambia da :
buffer letto = [sound ~
]
risultato = 124
a :
buffer letto = [sound ~
]
risultato = 124
q è = 0
mapporcapxxxxnazza!!!!!!!!!!!
ora stdout mi mostra effettivamente 3 caratteri in più davanti a sound!!!!!!!!!!!
effettivamente andando a vedere in esadecimale ci sono sti 3 byte che non centrano nulla, ma col notepad non si vedevano!!!!!
e mi chiedo perchè con la prima funzione non mi mostrasse sti stramaledetti 3 byte in testa al file ascii
-
grazie a dsar e legacy per la pazienza e l'aiuto.
ora rimane da capire perchè la stessa printf prima non mostra, poi di colpo mostra i caratteri a caso :)
ora funziona tutto comunque,ma per un bel po' mi ha fatto diventare scemo stà cosa,anche perhè dovrei basare il mio parser proprio sulla string compare :)
-
grazie a dsar e legacy per la pazienza e l'aiuto.
ora rimane da capire perchè la stessa printf prima non mostra, poi di colpo mostra i caratteri a caso :)
ora funziona tutto comunque,ma per un bel po' mi ha fatto diventare scemo stà cosa,anche perhè dovrei basare il mio parser proprio sulla string compare :)
Probabilmente è una sequenza Unicode di controllo, per la direzione della scrittura e cose del genere. In notepad non si vedono perchè sono caratteri nascosti che vengono elaborati dallo stesso editor per poter regolare la visualizzazione del testo.
-
grazie a dsar e legacy per la pazienza e l'aiuto.
ora rimane da capire perchè la stessa printf prima non mostra, poi di colpo mostra i caratteri a caso :)
ora funziona tutto comunque,ma per un bel po' mi ha fatto diventare scemo stà cosa,anche perhè dovrei basare il mio parser proprio sulla string compare :)
Probabilmente è una sequenza Unicode di controllo, per la direzione della scrittura e cose del genere. In notepad non si vedono perchè sono caratteri nascosti che vengono elaborati dallo stesso editor per poter regolare la visualizzazione del testo.
la cosa strana è che per un certo periodo non me li mostrava nemmeno la printf.... bho ....