Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [c] help struttura

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258

    [c] help struttura

    ciao! dov'è l'errore? ..Mi segnala "tipo incompatibile" :bubu:

    codice:
    #include <stdio.h>
    
    int main()
    {
      struct agenda
      {
        char nome[15];
        char cognome[15];
        char cellulare[15];
        char email[30];
        int numero_ragazze[10];
      } a1, a2, a3;
    
      a1.numero_ragazze = 4;
      a2 = a1;
      printf("%d", a2.numero_ragazze);
    
      getch();
      return 0;
    }

  2. #2

    Re: [c] help struttura

    Originariamente inviato da Lucked

    codice:
      struct agenda
      {
        char nome[15];
        char cognome[15];
        char cellulare[15];
        char email[30];
        int numero_ragazze;
      } a1, a2, a3;
    prova così

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    si è vero...mi sono fatto confondere dal numero delle ragazze!
    ora ho fatto un'altra prova!...
    ....
    ....
    a1.nome = "Luca";
    a2 = a1;
    printf("%s", a2.nome);

    qui perche non funxiona?

  4. #4
    in C per fare questo, devi usare la funzione strcpy()

    codice:
    strcpy(a1.nome, "Luca");
    a2 = a1;
    printf("%s", a2.nome);

  5. #5
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936
    Originariamente inviato da Lucked
    si è vero...mi sono fatto confondere dal numero delle ragazze!
    ora ho fatto un'altra prova!...
    ....
    ....
    a1.nome = "Luca";
    a2 = a1;
    printf("%s", a2.nome);

    qui perche non funxiona?
    Perchè nome è un'array, non un puntatore...
    Prova così:
    codice:
      struct agenda
      {
        char *nome;
        char cognome[15];
        char cellulare[15];
        char email[30];
        int numero_ragazze;
      } a1, a2, a3;
    PS: Anche per nome, cognome, cellulare e email devi usare puntatori se vuoi usare lo stesso metodo.


    PS2: Se il valore da inserire non è statico (ma dinamico, ad esempio è un valore inserito da input) devi usare necessariamente gli array, non puoi usare i puntatori, in questo caso puoi usare la funzione strcpy.


    Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    Siii..ho trovato la strada che mi piace!
    dichiaro nella struct un puntatore nome e poi faccio:

    a1.nome = "Luca";

    ho delle domande però:

    1)ma se poi faccio:
    a1.nome = "Andrea";

    "Luca" rimarrà da qualche parte nella memoria dell'heap o si cancella?
    ---------------------------------------------------------------
    2)è più o meno conosciuto il motivo per cui se faccio:

    char nome[15];
    nome = "Luca";

    è errore?

    per sopravvivere a ciò mi pare si usi, come mi avete detto la funzione strcpy

  7. #7
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936
    Originariamente inviato da Lucked
    Siii..ho trovato la strada che mi piace!
    dichiaro nella struct un puntatore nome e poi faccio:

    a1.nome = "Luca";

    ho delle domande però:

    1)ma se poi faccio:
    a1.nome = "Andrea";

    "Luca" rimarrà da qualche parte nella memoria dell'heap o si cancella?
    Rimane in memoria in una parte della memoria chiamata (mi pare) tabella delle stringhe...
    TUTTE le costanti rimangono in memoria... E se provi a modificarle cambierà il valore di tutti i puntatori che puntano alla stesa stringa.

    2)è più o meno conosciuto il motivo per cui se faccio:

    char nome[15];
    nome = "Luca";

    è errore?

    per sopravvivere a ciò mi pare si usi, come mi avete detto la funzione strcpy
    Perchè cerchi di inserire un aray in un array, e ciò non va bene:
    non va bene nemmeno fare:

    int a[3], b[3] = { 1, 2, 3 };
    a = b;

    per lo stesso motivo: non puoi assegnare a un array il valore di un altro array.
    Devi assegnarlo elemento per elemento, e la funzione strcpy fa proprio questo


    Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00

  8. #8
    Originariamente inviato da Lucked
    Siii..ho trovato la strada che mi piace!
    dichiaro nella struct un puntatore nome e poi faccio:

    a1.nome = "Luca";

    ho delle domande però:

    1)ma se poi faccio:
    a1.nome = "Andrea";

    "Luca" rimarrà da qualche parte nella memoria dell'heap o si cancella?
    "Luca" è una stringa costante che in teoria non potresti modificare, ma in realtà l'area di memoria che la contiene non è garantito che sia protetta (anche se sui x86 esiste un bit per proteggere alcune pagina dalla scrittura)

    di solito su queste architetture è memorizzata nel DATA SEGMENT


    char nome[15];
    nome = "Luca";

    è errore?
    si, in C devi usare la strcpy se vuoi copiarlo in un array

    in C++ puoi usare la classe string, che ti permette di fare questo
    codice:
    string nome = "Luca";
    string cognome = "Rossi";

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