NSA - Non Solo Amiga

SOFTWARE => Linguaggi di programmazione e scripting => Topic aperto da: raistlin77it - 30 Marzo 2014, 11:50:19

Titolo: [C] stupido errore di strncmp
Inserito 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 :

Codice: [Seleziona]
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 è :

Codice: [Seleziona]
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 ?
Titolo: Re:[C] stupido errore di strncmp
Inserito da: raistlin77it - 30 Marzo 2014, 12:27:12
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 è :

Codice: [Seleziona]
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?
Titolo: Re:[C] stupido errore di strncmp
Inserito da: raistlin77it - 30 Marzo 2014, 12:53:15
allora modificando da così :
Codice: [Seleziona]
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ì :

Codice: [Seleziona]
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 :
Codice: [Seleziona]
buffer letto = [sound ~
]
risultato  = 124


a :
Codice: [Seleziona]
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
Titolo: Re:[C] stupido errore di strncmp
Inserito da: raistlin77it - 30 Marzo 2014, 12:58:26
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  :)
Titolo: Re:[C] stupido errore di strncmp
Inserito da: Z80Fan - 30 Marzo 2014, 16:01:49
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.
Titolo: Re:[C] stupido errore di strncmp
Inserito da: raistlin77it - 30 Marzo 2014, 18:06:22
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 ....