Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372

    contare elementi dell'array

    Non ho trovato una funzione (es: count) che ritorni il nr di elementi di un array ... esiste?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    sizeof

  3. #3
    Attenzione che sizeof non ritorna il numero di elementi dell'array ma la dimensione in bytes della variabile passata. Cioè:
    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
    La funzione che cerchi non esiste...te la devi fare conoscendo l'array.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Intendevo dire che deve usare il sizeof, ma appropriatamente ...

    Per gli array dichiarati staticamente si puo' scrivere

    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));
    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_arr3 = new char[10];
      printf("%d\n", _msize(tmp_arr3)/sizeof(char));

  5. #5
    Grazie, la _msize non la conoscevo


  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da fastcoder
    Grazie, la _msize non la conoscevo

    Di nulla ... ciao

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    Originariamente inviato da oregon
    Intendevo dire che deve usare il sizeof, ma appropriatamente ...

    Per gli array dichiarati staticamente si puo' scrivere

    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));
    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_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??

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da stefanoB
    ma comunque non si ottiene il nr di elementi (row) dell'array?? Come si fa??
    Non capisco cosa dici ... hai provato il codice?

  9. #9
    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.

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Guarda che avevo appena scritto come fare ...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.