Newsgroup: it.comp.programmare
Titolo: problema con length di array in C

Salve a tutti quanti.
Stavo facendo delle prove per trovare il modo di determinare la lunghezza
di un array, e ho risolto come segue
sizeof(mioArray)/sizeof(mioArray[0])
ora pero' ho un problema:
Quando invio ad una funzione il mioArray, e gli applico la verifica della
lunghezza, in sizeof(mioArray) mi ritorna, nel caso di un array di int, 4,
e sizeof(mioArray[0]) mi ritorna (giustamente) 4, quindi mioArray mi
risulta lungo 1 quando in realta' dovrebbe risultare (in questo caso) 7.
Esempio Banale:
////////////////
int funz1(int array[]) {
	return sizeof(array)/sizeof(array[0]);
}
int main(){
	int mioArray[] = {1,2,3,4,5,6,7};
	int lunghezza=funz1(mioArray);
	printf("%d\n", lunghezza); //anziche stamparmi a schermo 7 
				   //mi stampa a schermo 1
	int lunghezza2=sizeof(mioArray)/sizeof(mioArray[0]);
	printf("%d\n", lunghezza2); // stampa a schermo 7 !!
}
////////////////
Come mai?
Come posso fare perche' se passo un array ad un'altra funzione questa mi
riesca a determinare la lunghezza giusta ?
Grazie

 e sizeof(mioArray[0]) mi ritorna (giustamente) 4,
Perche' quando viene passato ad una funzione un array decade al suo
puntatore. All'interno della funzione tu non hai l'array ma solo il
suo puntatore e la dimensione che ottieni e' quella di un puntatore:
spiacente, ma (in un modo o nell'altro) devi passare alla funzione
anche la dimensione dell'array.
HTH
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Grazie per tutte e due le risposte..
YattA

riesca a determinare la lunghezza giusta ?
Non puoi farlo, a meno di non inserire valori "sentinella" alla fine
dell'array.  L'alternativa è passare la lunghezza alla funzione.

 riesca a determinare la lunghezza giusta ?
non puoi per il semplice fatto che il C non memorizza gli array in
alcuna struttura particolare, un array e' semplicemente una sequenza
di locazioni di memoria una dietro l'altra. Quindi non viene
memorizzata da nessuna parte l'informazione sulla lunghezza
dell'array.
Se puoi permettertelo, puoi mettere un carattere terminatore alla
fine dell'array e scandire tutto l'array finche' non lo trovi.
Oppure puoi passare ad un linguaggio che "ricordi" le dimensioni
degli array, come fa ad esempio il C++ con il tipo vector.
-- 
There are only 10 kinds of people in the world --
Those who understand binary, and those who don't.

sempre fuori quando si tocca questo argomento)
Filosofiche mica tanto.  L'errore del ns. amico deriva proprio dal non
aver compreso queste "sottigliezze".

 primo elemento
Alla luce della tua affermazione, mi spiegheresti perche' il seguente
codice non compila?
int main(void)
{
   char arr[] = "Pippo";
   char* ptrP = "Pippo";
   arr++;
   ptrP++;
   return 0;
}
Saluti filosofici....


 codice non compila?
ecco, lo sapevo... adesso per i prossimi tre mesi si sviluppera' un
flame in cui la gente si scanna sulle distinzioni tra array e
puntatori :).  La mia era una semplificazione perche' per rispondere
alla domanda non era necessario scendere nei dettagli. Se poi tu vuoi
addentrarti in una discussione su come, quando e perche' un array
decade a puntatore, allora fai pure. Ma non con me per favore :)


alla domanda non era necessario scendere nei dettagli. 
Lo era invece, l'OP dimostra di non aver compreso bene *proprio* i
"dettagli".