|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
|
[C] domanda facile su gestione array di caratteri
Ciao! sono relativamente nuovo alla programmazione e avrei una domanda forse banale (anzi di sicuro
![]() 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!
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0 |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Quote:
guarda per "strcpy" su msdn |
|
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
'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");
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
|
grazie a tutti e 2 della risposta risolutiva!...solo una cosa per andbin..
Quote:
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0 |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Ok, tralasciamo un momento le strutture e prendiamo un array dichiarato in una funzione:
Codice:
int main (void) { int arr[4]; int *p; int 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).
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
|
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!
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0 |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Sep 2006
Città: Andezeno (TO)
Messaggi: 116
|
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().
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:11.