Non ho trovato una funzione (es: count) che ritorni il nr di elementi di un array ... esiste?
Non ho trovato una funzione (es: count) che ritorni il nr di elementi di un array ... esiste?
Attenzione che sizeof non ritorna il numero di elementi dell'array ma la dimensione in bytes della variabile passata. Cioè:
La funzione che cerchi non esiste...te la devi fare conoscendo l'array.codice:char tmp_arr[10]; sizeof(tmp_arr); // OK...torna 10 long tmp_arr[10]; sizeof(tmp_arr); // Non torna 10 ma 40 perchè un long occupa 4bytes e quindi 4*10=40 char *tmp_arr = new char[10] sizeof(tmp_arr); // Non torna 10 ma 4 perchè un char * (pointer) occupa 4bytes su macchina a 32bit
![]()
Intendevo dire che deve usare il sizeof, ma appropriatamente ...
Per gli array dichiarati staticamente si puo' scrivere
per quelli dinamici, ci vuole anche una funzione che restituisca il numero di byte allocati (ad esempio la _msize per cui ci vuole l'header malloc.h)codice:char tmp_arr1[10]; printf("%d\n", sizeof(tmp_arr1)/sizeof(char)); long tmp_arr2[10]; printf("%d\n", sizeof(tmp_arr2)/sizeof(long));
codice:char *tmp_arr3 = new char[10]; printf("%d\n", _msize(tmp_arr3)/sizeof(char));
Di nulla ... ciaoOriginariamente inviato da fastcoder
Grazie, la _msize non la conoscevo![]()
![]()
![]()
Originariamente inviato da oregon
Intendevo dire che deve usare il sizeof, ma appropriatamente ...
Per gli array dichiarati staticamente si puo' scrivere
per quelli dinamici, ci vuole anche una funzione che restituisca il numero di byte allocati (ad esempio la _msize per cui ci vuole l'header malloc.h)codice:char tmp_arr1[10]; printf("%d\n", sizeof(tmp_arr1)/sizeof(char)); long tmp_arr2[10]; printf("%d\n", sizeof(tmp_arr2)/sizeof(long));
codice:char *tmp_arr3 = new char[10]; printf("%d\n", _msize(tmp_arr3)/sizeof(char));
ma comunque non si ottiene il nr di elementi (row) dell'array?? Come si fa??
Non capisco cosa dici ... hai provato il codice?Originariamente inviato da stefanoB
ma comunque non si ottiene il nr di elementi (row) dell'array?? Come si fa??
non c'e' un modo di poterlo fare correttamente.
infatti potresti anche provare a fare un ciclo for e ad ogni iterazione esaminare l'elemento di indice successivo nell'array.
Quando poi arrivi fuori array dovrebbe essere inviato un segnale di segmentation fault che potresti provare a gestire....
Pero' in certi casi puo' anche accadere che nella locazione di memoria che segue la fine dell'array sia stato allocato gia' qualcos'altro dello stesso programma e dunque non viene inviato il segnale.....
Io ci rinuncerei........![]()
Open your mind. Use Open Source.
Guarda che avevo appena scritto come fare ...