Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    643

    [c] problemi son strutture

    Non ricordo una cosa, vorrei capire come funzionano i valori assegnati ad una struttura
    Se io faccio cosi' funziona, asseggnando il valore ad elenco.cognome tramite la scanf()
    codice:
    #include <stdio.h>
    
    
    struct utente{
        char nome[20];
        char cognome[20];
        char telefono[10];       
    };
    
    struct utente elenco;
    
    main()
    {
    printf("\nInserire il cognome ");
    scanf("%s", elenco.cognome);
    
    printf("\ncognome = %s\n", elenco.cognome);
    }
    Se invece della scanf per assegnare il valore ad
    elenco.cognome
    digito
    codice:
    elenco.cognome = "esempio";
    mi da' l'errore
    codice:
    incompatible types in assignment
    Come mai non posso assegnarlo col secondo metodo ?

  2. #2
    mmmhm penso tu debba provare ad utilizzare la strcpy, che copia una stringa in una variabile.

    http://www.cplusplus.com/reference/c...string/strcpy/

  3. #3
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    codice:
    struct utente{
        const char *nome;
        const char* cognome;
        const char *telefono;       
    };
    
    int main(int arhc, char**argv)
    {
        struct utente elenco;
        elenco.cognome="pippo";
    }
    Attenzione alla parola chiave const, perchè in questo caso se dici elenco.cognome="pippo", la stringa "pippo" verrà messa nell' area di sola lettura del programma.Per cui se accedi ai suoi campi come ad esempio:
    codice:
    // se cognome era char* e non const char*
    elenco.cognome[1]='c';  // segmentation fault
    Va in segmentation fault perchè la stringa è di sola lettura.
    Dichiare const char* è quindi solo una forma di tutela.Non è strettamente necessario.
    L' incompatibilità è dovuta al fatto che "pippo" è di tipo const char* e non di tipo char[20].
    Se vuoi anche accedere in scrittura alle stringhe puoi usare la strcpy e dichiarare array di char:
    codice:
    // cognome è di tipo char[20]
    strcpy(elenco.cognome,"pippo");

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    643
    No, ma con la strcpy so che funziona, solo non capivo come mai non si poteva fare l'assgnamento diretto in quella maniera e la differenza che c'era con la scanf, che invece funziona.

  5. #5
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Mi ero dimenticato di dire la cosa più ovvia
    char cognome[20] è un array e non un puntatore.
    Dicendo elenco.cognome="pippo" stai assegnando l' array ad un' altra area di memoria.
    Ma un array è statico, è nello stack e non gli puoi re-assegnare l' indirizzo.

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    643
    Ma la scanf non agisce nella stessa maniera ?
    Nel senso che do' un valore da tastiera ad una stringa e questo diventa il valore dell'array.
    O la scanf in pratica fa quello che fa la strcpy, nel senso che copia il valore della stringa inserita da tastiera nel'array ?

  7. #7
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    La scanf con %s scrive i valori letti da input nell' array di char.

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    643
    Appunto, non capivo la differenza tra scriverli direttamente assegnando il valore di una stringa all'arrat e facendoglieli assegnare tramite scanf.

  9. #9
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Ora è chiaro?

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    643
    Si'

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.