Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    69

    [c] Domanda sulle struct

    Salve, mi trovo dinanzi ad un grattacapo, magari è una cosa semplice per i più esperti ma io che sto imparando non riesco a capirla. veniamo a noi;

    Ho una struct di questo tipo
    struct biblio {
    char titolo[100];
    char Autore[50];
    int anno;
    float prezzo;
    }libro;

    adesso il problema è: Se inserisco dei valori in questa maniera

    struct biblio libro = {"Guida al C", "Fabrizio Ciacchi", 2003, 45.2};

    tutto fila via liscio e riesco a stampare la ofni elemento della struct

    printf("Il titolo del libro e' %s\n", libro.titolo);
    printf("L'autore e' %s\n", libro.Autore);
    printf("Anno di pubblicazione %d\n", libro.anno);
    printf("Il prezzo %.2f\n", libro.prezzo);

    Ma se invece di inizializzare i valori come ho fatto sopra, lo faccio singolarmente:

    libro.titolo = "Titolo del libro";
    libro.Autore = "Autore del libro";
    libro.anno = 2004;
    libro.prezzo= 45.00;

    Per le prime due inizializzazioni mi da errore. Mi spiegate perchè?


    Edit: Il tipo d'errore è "incompatible type in assignment"

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    156
    certamente.

    le stringhe le devi conpiare con la string-copy

    codice:
    strcpy(libro.titolo, "Titolo del libro");
    strcpy(libro.Autore ,"Autore del libro");
    libro.anno = 2004;
    libro.prezzo= 45.00;

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    69
    Si grazie, così ho risolto l'errore di compilazione e il programma funge correttamente, ma continio a non capire perchè nel mio caso non funziona mentre nel tuo si

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    156
    Perchè libro.Autore è il puntatore alla stringa in questione.
    stai cercando assegnare una stringa ad un puntatore.

    Nel caso dell'inizializzazione funziona, perchè viene analizzata e risolta durante la compilazione e non durante l'esecuzione.

  5. #5

    Re: [c] Domanda sulle struct

    Originariamente inviato da liberlux
    Salve, mi trovo dinanzi ad un grattacapo, magari è una cosa semplice per i più esperti ma io che sto imparando non riesco a capirla. veniamo a noi;

    Ho una struct di questo tipo
    struct biblio {
    char titolo[100];
    char Autore[50];
    int anno;
    float prezzo;
    }libro;

    ............

    libro.titolo = "Titolo del libro";
    libro.Autore = "Autore del libro";
    libro.anno = 2004;
    libro.prezzo= 45.00;
    ...............
    l'assegnamento funziona se dichiari al posto come vettore un puntatore a stringa...

    cioe'

    struct biblio{
    char *titolo;
    char *Autore;
    int anno;
    float prezzo;
    }libro;

    in questo caso puoi usare l'assegnamento . . .
    Se una funzione riceve come argomento un puntatore di puntatore di puntatore quando la invochi ricordati che puo ricevere o un puntatore di puntatore di puntatore o l'indirizzo di un puntatore di puntatore

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    69
    Ah ok, chiarissimi, grazie mille

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

    Re: Re: [c] Domanda sulle struct

    Originariamente inviato da donato.sciarra
    l'assegnamento funziona se dichiari al posto come vettore un puntatore a stringa...

    cioe'

    struct biblio{
    char *titolo;
    char *Autore;
    int anno;
    float prezzo;
    }libro;

    in questo caso puoi usare l'assegnamento . . .
    Attenzione pero' ... in questo caso, se devi modificare un carattere della stringa, tieni presente che non lo potrai fare ...

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.