PDA

Visualizza la versione completa : [c] puntatori e vettori char


jc74
30-10-2009, 18:52
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


#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

oregon
30-10-2009, 20:25
strcpy(puntatore->array_CARATTERI, "uno");

strcpy(puntatore->z.array_caratteri, "nome");

puntatore->z.array_Karatteri[4] = 'k';

jc74
30-10-2009, 20:59
grazie per la risposta

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

oregon
30-10-2009, 21:00
Originariamente inviato da jc74
grazie per la risposta

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

KrOW
30-10-2009, 22:02
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:

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 . . .

jc74
31-10-2009, 00:14
vero K_array non k :dh:
6 1 grande Oregon :ciauz:
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 :ciauz:

KrOW
31-10-2009, 02:00
Perch dopo la sua inizializzazione, un array, viene visto dal compilatore come un puntatore costante.
Considera questo 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) . . .

jc74
31-10-2009, 11:51
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))


#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???

oregon
31-10-2009, 12:05
Non si e' capito cosa vuoi dire ...

jc74
31-10-2009, 13:06
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)

Loading