Autore Topic: [C] stupido errore di strncmp  (Letto 4092 volte)

Offline raistlin77it

  • Tech Guru
  • *****
  • Post: 221
  • Karma: +2/-0
    • Mostra profilo
[C] stupido errore di strncmp
« il: 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 ?

Offline raistlin77it

  • Tech Guru
  • *****
  • Post: 221
  • Karma: +2/-0
    • Mostra profilo
Re:[C] stupido errore di strncmp
« Risposta #1 il: 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?
« Ultima modifica: 30 Marzo 2014, 12:29:39 da raistlin77it »

Offline raistlin77it

  • Tech Guru
  • *****
  • Post: 221
  • Karma: +2/-0
    • Mostra profilo
Re:[C] stupido errore di strncmp
« Risposta #2 il: 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

Offline raistlin77it

  • Tech Guru
  • *****
  • Post: 221
  • Karma: +2/-0
    • Mostra profilo
Re:[C] stupido errore di strncmp
« Risposta #3 il: 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  :)

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re:[C] stupido errore di strncmp
« Risposta #4 il: 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.

Offline raistlin77it

  • Tech Guru
  • *****
  • Post: 221
  • Karma: +2/-0
    • Mostra profilo
Re:[C] stupido errore di strncmp
« Risposta #5 il: 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 ....

Tags: