Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Operatore == tra stringhe

    Ciao, vi mando due esempi di codice in cui l'operatore == tra stringhe si comporta in maniera diversa:

    codice:
    #include <stdio.h>
    #include <string.h>
    #include <malloc.h>
    
    int main()
    {
        char* s1=malloc(sizeof(char)*21);
        s1="01";
    
        if(s1=="01") printf ("Uguale!\n")   ;
        else printf("Diverso!\n");   
    }
    codice:
    #include <stdio.h>
    #include <string.h>
    #include <malloc.h>
    
    int main()
    {
        char* s1=malloc(sizeof(char)*21);
        strcpy(s1,"01");
    
        if(s1=="01") printf ("Uguale!\n")   ;
        else printf("Diverso!\n");   
    }
    nel primo esempio stampa "Uguale!" nel secondo "Diverso!".
    Qualcuno sa dirmi come mai questa differenza?
    grazie a tutti

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: Operatore == tra stringhe

    Originariamente inviato da anatasio
    Qualcuno sa dirmi come mai questa differenza?
    L'operatore == tra stringhe in C non compara il contenuto della stringa ma solamente i puntatori.

    In C, per confrontare le stringhe devi usare l'apposita funzione

    strcmp

    Quale libro utilizzi per studiare? Vai al capitolo delle stringhe e troverai tutto.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3

    Re: Re: Operatore == tra stringhe

    Originariamente inviato da oregon
    Quale libro utilizzi per studiare? Vai al capitolo delle stringhe e troverai tutto.
    sto usando il Kernighan-Ritche.

    Dimmi se ho capito bene:
    quando faccio s1=="01" in realtà sto confrontando degli indirizzi di memoria, e non il contenuto delle stringhe.

    Ma allora (visto che facendo s1="01" faccio puntare s1 ad un'area di memoria read-only) ciò significa che se inizializzo più stringhe in questo modo allo stresso valore, esse punteranno tutte allo stesso indirizzo?
    Per esempio:
    codice:
    char* s1=malloc(sizeof(char)*21);
    char* s2=malloc(sizeof(char)*21);	
    s1="01";
    s2="01";
    s1 ed s2 puntano allo stesso identico indirizzo?
    grazie

  4. #4
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Si, puntano allo stesso indirizzo.Inoltre l' allocazione che hai fatto risulta inutile, e viene perso ogni riferimento all' area di memoria che hai allocato, perchè quando fai s1="01", ora s1 non punta più alla zona di memoria allocata, ma a una zona di memoria di sola lettura che contiene la stringa "01".

  5. #5

    Re: Re: Re: Operatore == tra stringhe

    Originariamente inviato da anatasio
    sto usando il Kernighan-Ritche.

    Dimmi se ho capito bene:
    quando faccio s1=="01" in realtà sto confrontando degli indirizzi di memoria, e non il contenuto delle stringhe.

    Ma allora (visto che facendo s1="01" faccio puntare s1 ad un'area di memoria read-only) ciò significa che se inizializzo più stringhe in questo modo allo stresso valore, esse punteranno tutte allo stesso indirizzo?
    Per esempio:
    codice:
    char* s1=malloc(sizeof(char)*21);
    char* s2=malloc(sizeof(char)*21);	
    s1="01";
    s2="01";
    s1 ed s2 puntano allo stesso identico indirizzo?
    grazie
    proprio così

    almeno che non siano stringhe diverse
    Mi arrestarono un giorno per le donne ed il vino
    Non avevano leggi per punire un blasfemo
    Non mi uccise la morte ma due guardie bigotte
    Mi cercarono l'anima a forza di botte
    Fabrizio De André - Un Blasfemo

  6. #6
    ok. Grazie a tutti!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.