Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    56

    [c] puntatori e vettori char

    mi servirebbe un aiuto armeggio da poco i puntatori e ho fatto un es per capirne meglio il funzionamento su variabili strutturate ma ho problemi ad usarli con array char, le parti commentate sono i problemi che incontro sul modo di scrivere correttamente i comandi
    codice:
    #include <stdio.h>
    int main()
    {
     struct puntino
     { 
            int q;
            float j;
            char k;
            char array_caratteri[5];
            char array_Karatteri[6];
            int array_interi[5];
            };
     struct punto
     {
            int a;
            float b;
            char c;
            char array_CARATTERI[5];
            int array_INTERI[10];
            struct puntino z;
            };
     struct punto x={3,4.5,'p',"tre",{4,6,7},{3,5.6,'q',"roma","gatto",{1,4,6,7,8}}};
     printf("%d  %f  %c  %s  %d  %d  %f  %c  %s  %c  %d",x.a,x.b,x.c, 
              x.array_CARATTERI,x.array_INTERI[1],x.z.q,x.z.j,x.z.k,  
              x.z.array_caratteri,x.z.array_Karatteri[4],x.z.array_interi[0]);
     getchar();
     struct punto *puntatore=&x;
     puntatore->a=4;
     puntatore->b=5.6;
     puntatore->c='t';
    // puntatore-> array_CARATTERI[]="uno"; 
     puntatore->array_INTERI[1]=44;
     puntatore->z.q=444;
     puntatore->z.j=9.87;
     puntatore->z.k='y';
     //puntatore->z.array_caratteri[]="nome";
     //puntatore->z.array_karatteri[4]='k';
     puntatore->z.array_interi[0]=888;
     printf("%d  %f  %c  %s  %d  %d  %f  %c  %s  %c  %d",x.a,x.b,x.c, 
              x.array_CARATTERI,x.array_INTERI[1],x.z.q,x.z.j,x.z.k, 
              x.z.array_caratteri,x.z.array_Karatteri[4],x.z.array_interi[0]);
    
     getchar();
      return 0;
    }
    vi ringrazio per eventuali risposte e per la vostra pazienza

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

    Re: [c] puntatori e vettori char

    codice:
    strcpy(puntatore->array_CARATTERI, "uno"); 
    
    strcpy(puntatore->z.array_caratteri, "nome");
     
    puntatore->z.array_Karatteri[4] =  'k';
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    56
    grazie per la risposta
    codice:
     puntatore->z.array_karatteri[4]='k';
    dev cpp
    mi dice: che la struttura non ha membri col nome array_Karatteri

    per i comandi sopra è possibile assegnargli "valori" con il puntatore senza ricorrere a strcpy

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da jc74
    grazie per la risposta
    codice:
     puntatore->z.array_karatteri[4]='k';
    dev cpp
    mi dice: che la struttura non ha membri col nome array_Karatteri
    E' array_Karatteri con la K maiuscola ... attenzione ...

    per i comandi sopra è possibile assegnargli "valori" con il puntatore senza ricorrere a strcpy
    No, a meno che non scrivi una tua strcpy
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    Ciao ... Se proprio non vuoi usare la strcpy, puoi usare dei puntatori a char (o meglio ancora dei puntatori a const char) al posto degli array nella dichiarazione di struct:
    codice:
    struct puntino
    {
    int q;
    float j;
    char k;
    const char* array_caratteri;
    const char* array_Karatteri;
    int aray_interi[5];
    };
    
    struct puntino var_puntino = { 1, 0.5f, 'c', "stringa1", "stringa2", {0,1,2,3,4} };
    struct puntino* ppuntino = &var_puntino;
    ppuntino->array_caratteri = "nuova stringa1";
    ppuntino->array_Karatteri = "nuova stringa2";
    Ovviamente, su questi campi, potrai solo effettuare degli assegnamenti con delle stringhe letterali e non potrai modificare i vari caratteri . . .
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    56
    vero K_array non k
    6 1 grande Oregon
    perfavore se potete chiaritemi questo aspetto: perchè in un array di char "posso toccate" il singolo char ( puntatore->z.array_Karatteri[4]='k'; ) ma per "toccarli tutti" la questiona cambia!!!
    grazie per la risposta krOW

  7. #7
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    Perchè dopo la sua inizializzazione, un array, viene visto dal compilatore come un puntatore costante.
    Considera questo codice:
    codice:
    char char_array[10] = "ciao";
    char_array = "ariciao";
    durante l' inizializzazione di char_array è possibile assegnare una stringa letterale ad un array quindi la prima istruzione non da errori. Siccome dopo la sua inizializzazione, char_array sarà visto come un puntatore costante, la seconda istruzione verrà letta come <<inserisci l' indirizzo di "ariciao" in char_array>> quindi si ha un errore (visto che char_array è visto come un puntatore costante quindi non è permessa una modifica dell' indirizzo a cui punta) . . .
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    56
    grazie krOW
    se ho capito non posso modificare nel secondo modo la stringa come da es (fatto da te ariciao), è possibile la modifica solo con le regole delle stringhe.
    Mi dovrebbe essere consentita la modifica dei singoli caratteri che poi formano la stringa (uno per volta) ho provato e sembra che singolarmente va ok per la stringa nella sua interezza NO!!
    es modifica stringa NON nella sua interezza ma dei singoli caratteri ((righe commentate))
    codice:
    #include <stdio.h>
    int main()
    {
     struct puntino
     { 
            int q;
            float j;
            char k;
            char array_caratteri[5];
            char array_Karatteri[6];
            int array_interi[5];
            };
     struct punto
     {
            int a;
            float b;
            char c;
            char array_CARATTERI[5];
            int array_INTERI[10];
            struct puntino z;
            };
     struct punto x={3,4.5,'p',"tre",{4,6,7},{3,5.6,'q',"roma","gatto",{1,4,6,7,8}}};
     printf("%d  %f  %c  %s  %d  %d  %f  %c  %s  %c  %d",x.a,x.b,x.c, 
              x.array_CARATTERI,x.array_INTERI[1],x.z.q,x.z.j,x.z.k,  
              x.z.array_caratteri,x.z.array_Karatteri[4],x.z.array_interi[0]);
     getchar();
     struct punto *puntatore=&x;
     puntatore->a=4;
     puntatore->b=5.6;
     puntatore->c='t';
     /*puntatore-> array_CARATTERI[]="uno";  risultato da ottenere modifica stringa dalla 
                                                               parola tre a uno*\
     puntatore-> array_CARATTERI[0]='u';  //questo è il punto 0
     puntatore-> array_CARATTERI[1]='n';  //questo è il punto 1
     puntatore-> array_CARATTERI[2]='o';  //questo è il punto 2
     puntatore->array_INTERI[1]=44;
     puntatore->z.q=444;
     puntatore->z.j=9.87;
     puntatore->z.k='y';
     //puntatore->z.array_caratteri[]="nome"; //comr sopra solutio
     puntatore->z.array_Karatteri[4]='k';
     puntatore->z.array_interi[0]=888;
     printf("%d  %f  %c  %s  %d  %d  %f  %c  %s  %c  %d",x.a,x.b,x.c, 
              x.array_CARATTERI,x.array_INTERI[1],x.z.q,x.z.j,x.z.k, 
              x.z.array_caratteri,x.z.array_Karatteri[4],x.z.array_interi[0]);
    
     getchar();
      return 0;
    }
    confermate quanto detto o sto dicendo stupidate???

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non si e' capito cosa vuoi dire ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    56
    è vero oregon
    mi sono spegato malissimo!!!!
    quello che volevo dire è il mio char array ha per ogni posizione un carattere, ad es
    char array="ciao";
    è un array di catteri "grande" 5 caratteri (c-i-a-o-null), mi sembra di capire che posso chiederne la stampa come stringa %s o chiedere di stampare il singolo carattere %c es quello alla posizione 1 cioè -i-.
    questo mi sembra corretto,ma a questo punto voglio modificare tutti caratteri dell'array con un puntatore mi sono accorto che ciò è possibile andando a modificare di volta in volta i singoli caratteri, ma non è possibile modificare come da es krow la stringa interamente con un puntatore( senza usare comandi per stringhe)

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.