View Full Version : [C] domanda facile su gestione array di caratteri
Ciao! sono relativamente nuovo alla programmazione e avrei una domanda forse banale (anzi di sicuro :D) sulla gestione degli array di caratteri in C, io ho dichiarato una cosa del tipo (giusto per capire il concetto ):
typedef struct {
char nome[50];
int annonascita;
} anagrafiche;
anagrafiche elemento[10];
poi all'interno del corpo del main ho scritto:
elemento[0].nome = "Simone";
e mi dice "incompatible types in assignment of `const char[7]' to `char[50]' "
Non posso assegnare la stringa se ha un numero di caratteri diverso da quello che ho dichiarato prima?..come faccio?
grazie mille!
Ciao! sono relativamente nuovo alla programmazione e avrei una domanda forse banale (anzi di sicuro :D) sulla gestione degli array di caratteri in C, io ho dichiarato una cosa del tipo (giusto per capire il concetto ):
typedef struct {
char nome[50];
int annonascita;
} anagrafiche;
anagrafiche elemento[10];
poi all'interno del corpo del main ho scritto:
elemento[0].nome = "Simone";
e mi dice "incompatible types in assignment of `const char[7]' to `char[50]' "
Non posso assegnare la stringa se ha un numero di caratteri diverso da quello che ho dichiarato prima?..come faccio?
grazie mille!
devi usare strcpy(elemento[0].nome, "Simone");
guarda per "strcpy" su msdn
Non posso assegnare la stringa se ha un numero di caratteri diverso da quello che ho dichiarato prima?No non è un problema di lunghezza delle stringhe ma di tipo di dato che non è compatibile.
'nome' è un array, non un puntatore. Non puoi cambiare l'indirizzo di un array!! In pratica il solo nome dell'array (es. elemento[0].nome) non può essere un l-value cioè non può stare nella parte sinistra in un assegnamento.
Quindi non puoi assegnare un puntatore char* (come lo è la stringa "Simone") ad un array.
Devi usare strcpy o simili/equivalenti.
strcpy (elemento[0].nome, "Simone");
grazie a tutti e 2 della risposta risolutiva!...solo una cosa per andbin..
'nome' è un array, non un puntatore. Non puoi cambiare l'indirizzo di un array!! In pratica il solo nome dell'array (es. elemento[0].nome) non può essere un l-value cioè non può stare nella parte sinistra in un assegnamento.
non sono molto sicuro di aver capito..
non sono molto sicuro di aver capito..Ok, tralasciamo un momento le strutture e prendiamo un array dichiarato in una funzione:
int main (void)
{
int arr[4];
int *p;
int var;
....
}'arr' è un array allocato da qualche parte in memoria (per essere precisi, sullo stack, essendo una variabile locale). Il suo indirizzo non può cambiare. Così come non puoi cambiare l'indirizzo della variabile 'var'.
In sostanza, puoi fare:
p = arr;
oppure
p = &var;
ma non:
arr = p;
oppure (peggio ancora)
&var = p;
Una volta che hai definito una variabile, di qualunque tipo, il suo indirizzo non può cambiare. E attenzione a non confondere questo con i puntatori. Un puntatore è anch'esso una variabile, il cui indirizzo non può cambiare mentre il contenuto (cioè a cosa punta) può ovviamente cambiare (salvo dichiarare il puntatore const ma è un altro discorso, un po' diverso).
oh grazie spero di aver capito bene stavolta! :-) ti ringrazio della disponibilità scusa se non ho risposto subito ma ho letto la risposta ora..grazie mille ciao!
equefast
26-10-2007, 15:50
magari è anche un programmino semplice, però ti consiglio di prendere la buona abitudine di verificare che ciò che scrivi in un buffer non sia più lungo del buffer stesso. Almeno usa una strncpy().
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.