Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505

    lunghezza stringhe diverse tra struct.string e string

    salve.

    io ho questa struttura :
    codice:
    struct msg {
    	char mex[10];
    };
    nella quale memorizzo questo :
    codice:
    struct msg m;
    sprintf(m.mex, "%s", "end_of_tr1");
    poi però se faccio questo confronto :
    codice:
    if(m.mex=="end_of_tr1")
    non me le reputa uguali... com'è possibile?
    controllando con sizeof le due stringhe, m.mex è lunga 10, "end_of_tr1" è lunga 11.

    sono in acido?
    cordiali saluti

  2. #2
    Le stringhe in C sono degli array di caratteri, e se si usa l'operatore == gli array si "degradano" a puntatori; di conseguenza, un test di uguaglianza effettuato con == dà come risultato true solo se le due stringhe si trovano alla medesima locazione di memoria (ossia, sono la medesima stringa). Per confrontare invece il contenuto di due stringhe (ossia i loro caratteri), si usa la funzione strcmp.

    Tra l'altro, la stringa mex non è sufficientemente ampia per contenere il messaggio che ci stai copiando dentro, dal momento che per esso sono necessari 10 caratteri (di testo effettivo) più il terminatore di stringa NUL, per un totale di 11 caratteri.

    Inoltre, in quella circostanza non è necessario usare sprintf, basta strcpy; in ogni caso ti consiglio di usare sempre le versioni counted delle funzioni di manipolazione delle stringhe (snprintf, strncpy, ...) onde evitare buffer overflow.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    A conclusione delle osservazioni di MItaly ti suggerirei di rivedere (e anche bene) il capitolo del tuo libro di C riguardante le stringhe, perchè sembra che tu non l'abbia neanche aperto ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    cavolo è vero, non mi ricordavo questa cosa della degradazione a puntatori con gli array. ho programmato in C circa 5-6 anni fà, poi son passato a java, poi php, ecc ecc...dimenticandomi alcune nozioni "fondamentali".

    grazie per le delucidazioni

  5. #5
    Prego, ciao!
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.