View Full Version : [C] Illegal Initialization in function.. perchè?!
Diabolik.cub
20-06-2004, 19:36
void func(char *prova) {
char *p = prova;
char *s[2] = {"gianni", prova};
}
ho un problemino che non riesco a risolvere: passo una stringa ad una funzione, se nelle dichiarazioni assegno ad un puntatore a char quella stringa tutto ok (prima riga, p), mentre se la assegno in una posizione di un vettore di stringhe non mi fa compilare e mi segnala "Illegal Initialization" (caso di s).
Perchè mai??
Ed_Bunker
20-06-2004, 20:00
Originariamente inviato da Diabolik.cub
void func(char *prova) {
char *p = prova;
char *s[2] = {"gianni", prova};
}
ho un problemino che non riesco a risolvere: passo una stringa ad una funzione, se nelle dichiarazioni assegno ad un puntatore a char quella stringa tutto ok (prima riga, p), mentre se la assegno in una posizione di un vettore di stringhe non mi fa compilare e mi segnala "Illegal Initialization" (caso di s).
Perchè mai??
Perche' devi scrivere:
char s[2] = {"gianni", prova};
scrivendo "char * ..." crei un puntatore mentre tu, da quel che ho capito, vuoi un array che contenga due stringhe.
h1jack3r
20-06-2004, 20:00
Non credo tu possa inizializzarla così, se vuoi copiare gianni in s[2] dovrai usare una strcpy. Non so neanche se tu possa mettere s[2] o se devi prima incrementare il puntatore, farlo diventare s++ e poi solo dopo lavorarci sopra..
h1jack3r
20-06-2004, 20:05
Originariamente inviato da Ed_Bunker
Perche' devi scrivere:
char s[2] = {"gianni", prova};
scrivendo "char * ..." crei un puntatore mentre tu, da quel che ho capito, vuoi un array che contenga due stringhe.
ma se ha allocato memoria per mettiamo 10 stringhe
può scorrere le dieci stringhe facendo un ciclo
for(i=0;i<10;i++)
//lavorare su s
s++ //per accedere ala seconda stringa eccetera..
Ed_Bunker
20-06-2004, 20:13
Originariamente inviato da Ed_Bunker
Perche' devi scrivere:
char s[2] = {"gianni", prova};
scrivendo "char * ..." crei un puntatore mentre tu, da quel che ho capito, vuoi un array che contenga due stringhe.
Ho detto una caz**** : scrivendo
char s[2]
dichiari una stringa di due caratteri. :muro:
Il problema, forse, e' che nell'array devi inserire direttamente una stringa e non puntatori a stringhe.
Ovvero:
char * s[2]: array che contiene due stringhe (OK)
"gianni": stringa che si trova in s[0] (OK)
prova: questa non e' una stringa bensi un puntatore ad una stringa (??)
Non sono sicuro ma potrebbe essere quello il problema...
Ed_Bunker
20-06-2004, 20:16
Originariamente inviato da h1jack3r
ma se ha allocato memoria per mettiamo 10 stringhe
può scorrere le dieci stringhe facendo un ciclo
for(i=0;i<10;i++)
//lavorare su s
s++ //per accedere ala seconda stringa eccetera..
Scusami, cosa vuol dire che ha allocato mem. per 10 stringhe ?!? Lui nella funzione sopra non ha fatto nessuna allocazione dinamica. Ha soltanto creato un array atto a contenere due stringhe passate esplicitamente. Il ciclo che hai scritto tu puo' andar bene su un array contenente 10 stringhe:
char * s[10];
E poi magari allocare dinamicamente la mem. per le singole stringhe (s[1], s[2], s[3],...) contenute nell'array.
Diabolik.cub
20-06-2004, 21:52
Originariamente inviato da Ed_Bunker
char * s[2]: array che contiene due stringhe (OK)
"gianni": stringa che si trova in s[0] (OK)
prova: questa non e' una stringa bensi un puntatore ad una stringa (??)
Non sono sicuro ma potrebbe essere quello il problema...
sì forse ci hai preso.. però è strano che un puntatore singolo possa essere inizializzato così e una "cella" di un array no.
Ovviamente se dopo la dichiarazione scrivo
s[0] = prova;
me lo prende senza fiatare.
Ed_Bunker
21-06-2004, 00:06
Minchia...
facendo come avevi scritto all'inizio va bene (Ed infatti se un puntatore a char "equivale" ad un array di char e quindi ad una stringa...)
void func (char*);
int main (int argc, char * argv[])
{
if (argc != 2)
{
perror("Usage: prova name");
exit(-1);
}
char * parola = argv[1];
func(parola);
printf("Funzione eseguita correttamente\n");
return(0);
}
void func ( char * prova)
{
char * p = prova;
char * s[2] = {"Ste", prova};
printf("%s\n", s[0]);
printf("%s\n", s[1]);
return;
}
P.S.: questo compila ed esegue correttamente.
Prova....
Diabolik.cub
21-06-2004, 00:38
Originariamente inviato da Ed_Bunker
Minchia...
facendo come avevi scritto all'inizio va bene (Ed infatti se un puntatore a char "equivale" ad un array di char e quindi ad una stringa...)
P.S.: questo compila ed esegue correttamente.
Prova....
:eek: :eek:
accidenti allora mi devo rassegnare e cambiare compilatore, sto scoprendo un bug dietro l'altro :muro:
e pensare che ormai mi ci ero affezionato!!
:cry:
guarda cosa succede se compilo quelle righe di codice (tralasciando il fatto che mi sono dimenticato di aggiugere i vari #include e quindi non trova i prototipi)
http://utenti.lycos.it/riderforever/error.jpg
Gandalf_BD
21-06-2004, 09:28
Originariamente inviato da Diabolik.cub
:eek: :eek:
accidenti allora mi devo rassegnare e cambiare compilatore, sto scoprendo un bug dietro l'altro :muro:
e pensare che ormai mi ci ero affezionato!!
:cry:
Te l'ho sempre detto... :asd: :asd: :Prrr: :D :angel:
Ed_Bunker
21-06-2004, 15:09
Originariamente inviato da Diabolik.cub
:eek: :eek:
accidenti allora mi devo rassegnare e cambiare compilatore, sto scoprendo un bug dietro l'altro :muro:
e pensare che ormai mi ci ero affezionato!!
:cry:
guarda cosa succede se compilo quelle righe di codice (tralasciando il fatto che mi sono dimenticato di aggiugere i vari #include e quindi non trova i prototipi)
http://utenti.lycos.it/riderforever/error.jpg
Butta tutto dalla finestra !!!
:D :D :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.