|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Sardegna
Messaggi: 1005
|
[C] Inizializzare una matrice di stringhe, membro di una struttura.
Salve a tutti,
da main io scrivo questo Codice:
char *str[]={"ciao","ciao","ciao"};
Ma non riesco a inserire quella variabile in una struttura. Codice:
struct struttura
{
char *str[];
}
main()
{
struct struttura item;
item.str[]={"ciao","ciao","ciao"};
}
error: expected expression before ‘]’ token Qual è la sintassi giusta? Ho provato anche: Codice:
item->str[]={"ciao","ciao","ciao"};
item.str={"ciao","ciao","ciao"};
item->str={"ciao","ciao","ciao"};
ma niente! Ho incluso stdlib.h e string.h. Soluzioni?
__________________
Aeroengine II BBA Black | Asus P5N-T Deluxe 780i | Intel E8400 C0 @4,050Ghz 1,35v + TR Ultra-120 eXtreme | Corsair 2x2GB PC6400 XMS2 DHX @900Mhz 2,15v | XFX 8800 GT 512MB @730/990 + TR HR-03 Rev. A | Tagan TG500-BZ | Zalman ZM-MFC2 Fan Control | WD Raptor 10000rpm 150 GB + 1,5TB | Iiyama ProLite E2607WSV |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Perché non puoi fare quella cosa con un'assegnazione, lo puoi fare solo durante un'inizializzazione (come hai fatto all'inizio).
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jul 2008
Città: Sardegna
Messaggi: 1005
|
Quote:
io voglio inizializzare quel valore dal main.. anche perchè da struttura non lo posso fare, visto che mi converrebbe in quanto costante!
__________________
Aeroengine II BBA Black | Asus P5N-T Deluxe 780i | Intel E8400 C0 @4,050Ghz 1,35v + TR Ultra-120 eXtreme | Corsair 2x2GB PC6400 XMS2 DHX @900Mhz 2,15v | XFX 8800 GT 512MB @730/990 + TR HR-03 Rev. A | Tagan TG500-BZ | Zalman ZM-MFC2 Fan Control | WD Raptor 10000rpm 150 GB + 1,5TB | Iiyama ProLite E2607WSV |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Dipende, a seconda di ciò che devi fare. Può esserti più comodo fare un'array bidimensionale dando una grandezza fissa alle stringhe, ed allora basterebbe fare una cosa tipo:
Codice:
strcpy(struttura.stringhe[0], "stringa1"); strcpy(struttura.stringhe[1], "stringa2"); strcpy(struttura.stringhe[2], "stringa3"); P.S.: ora non ricordo con esattezza, ma con GCC dovrebbe esserti possibile anche fare una cosa del genere: Codice:
struct struttura
{
char *str[];
}
int main()
{
struct struttura item = { str: {"ciao","ciao","ciao"} };
/* ... */
return 0;
}
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jul 2008
Città: Sardegna
Messaggi: 1005
|
Quote:
Mi serve che sia proprio tutto senza COSTANTI (in pratica sto facendo una specie di space invaders e quella matrice di stringhe rappresenta il 'disegno' di tutti gli item, quindi deve poter essere 3x2 4x4 1x5 ecc ecc..) Se dovessi usare la malloc che sizeof ci metto? Mi sembra strano..
__________________
Aeroengine II BBA Black | Asus P5N-T Deluxe 780i | Intel E8400 C0 @4,050Ghz 1,35v + TR Ultra-120 eXtreme | Corsair 2x2GB PC6400 XMS2 DHX @900Mhz 2,15v | XFX 8800 GT 512MB @730/990 + TR HR-03 Rev. A | Tagan TG500-BZ | Zalman ZM-MFC2 Fan Control | WD Raptor 10000rpm 150 GB + 1,5TB | Iiyama ProLite E2607WSV |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Se vuoi una cosa tipo quella puoi anche semplicemente mettere l'array in una variabile statica globale che sarà letta solo da chi disegna, ed inizializzarla staticamente.
Altrimenti dovresti allocare la dimensione giusta, e cioè il numero di caratteri di cui quella particolare stringa di compone, più uno per il terminatore di stringa ('\0'), il tutto moltiplicato per sizeof(char). Alternativamente, potresti usare strdup(), che non si limita a ricopiare la stringa, ma la duplica sull'heap, allocandone dinamicamente (ed automaticamente) la memoria. Ovviamente, in tal caso, non dimenticare la free().
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jul 2008
Città: Sardegna
Messaggi: 1005
|
Quote:
Comunque mi chiedo come mai nel main funziona, invece con il membro della struttura non va!
__________________
Aeroengine II BBA Black | Asus P5N-T Deluxe 780i | Intel E8400 C0 @4,050Ghz 1,35v + TR Ultra-120 eXtreme | Corsair 2x2GB PC6400 XMS2 DHX @900Mhz 2,15v | XFX 8800 GT 512MB @730/990 + TR HR-03 Rev. A | Tagan TG500-BZ | Zalman ZM-MFC2 Fan Control | WD Raptor 10000rpm 150 GB + 1,5TB | Iiyama ProLite E2607WSV |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Era solo una possibilità quella delle variabili globali.
In che senso non funziona, quale dei vari metodi? Alle brutte fatti una piccola routine di inizializzazione e fai le strdup().
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Jul 2008
Città: Sardegna
Messaggi: 1005
|
Quote:
Codice:
int *str[]={"ciao","ciao"};
Probabilmente non conosco la sintassi giusta per inizializzare quel membro della struttura!
__________________
Aeroengine II BBA Black | Asus P5N-T Deluxe 780i | Intel E8400 C0 @4,050Ghz 1,35v + TR Ultra-120 eXtreme | Corsair 2x2GB PC6400 XMS2 DHX @900Mhz 2,15v | XFX 8800 GT 512MB @730/990 + TR HR-03 Rev. A | Tagan TG500-BZ | Zalman ZM-MFC2 Fan Control | WD Raptor 10000rpm 150 GB + 1,5TB | Iiyama ProLite E2607WSV |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
Per farlo dovresti usare una sintassi come quella che ti ho scritto sopra, ma non puoi passare un'array di dimensione variabile dentro una struttura, la quale è richiesto che abbia dimensione fissa (ognuno dei suoi campi deve avere una dimensione ben nota a compile-time, sennò salta tutto). Quindi purtroppo non funziona. Non mi viene in mente nessun'altra soluzione se non allocare il tutto dinamicamente. ciao
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! Ultima modifica di DanieleC88 : 20-01-2009 alle 00:18. |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Sardegna
Messaggi: 1005
|
Ho risolto bypassando il problema.
Ovvero nella struttura metto un normale puntatore a char: Codice:
struct item
{
int var;
int var2;
char *p; //puntatore al vettore di stringhe
};
Codice:
main()
{
char *disegno[]={"q_p"," ! "},
struct item mostro={var1,var2,disegno[0]};
printf("%s\n",mostro.p); //prima stringa
printf("%s\n",mostro.p+strlen(mostro.p)+1);
//... e così via moltiplicando per i l'offset in un eventuale ciclo for
}
__________________
Aeroengine II BBA Black | Asus P5N-T Deluxe 780i | Intel E8400 C0 @4,050Ghz 1,35v + TR Ultra-120 eXtreme | Corsair 2x2GB PC6400 XMS2 DHX @900Mhz 2,15v | XFX 8800 GT 512MB @730/990 + TR HR-03 Rev. A | Tagan TG500-BZ | Zalman ZM-MFC2 Fan Control | WD Raptor 10000rpm 150 GB + 1,5TB | Iiyama ProLite E2607WSV |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Non è scomodissimo? Fai un char ** e campa felice.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
Spero di stare lontano dal C più tempo possibile
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Oh, ma non temere, questo non era certo il peggio che si potesse fare con il C.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
Quote:
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. |
|
|
|
|
|
|
#16 | |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Tratto da Todo Modo di Leonardo Sciascia:
Quote:
|
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Sardegna
Messaggi: 1005
|
ma faccio un char p** nella struttura? o poi lo associo al vettore di stringhe in modo da poterlo utilizzare meglio quando poi faccio la stampa?
__________________
Aeroengine II BBA Black | Asus P5N-T Deluxe 780i | Intel E8400 C0 @4,050Ghz 1,35v + TR Ultra-120 eXtreme | Corsair 2x2GB PC6400 XMS2 DHX @900Mhz 2,15v | XFX 8800 GT 512MB @730/990 + TR HR-03 Rev. A | Tagan TG500-BZ | Zalman ZM-MFC2 Fan Control | WD Raptor 10000rpm 150 GB + 1,5TB | Iiyama ProLite E2607WSV |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
Mi ha colpito nel profondo questa citazione... ma mai di quanto mi può colpire (e fare svenire) il C
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:25.




















