|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
[C] Conteggio degli elementi in un puntatore ad array
Avendo una array del tipo:
Codice:
char * miaarr = {'c', 'i', 'a', 'o'};
Codice:
int len = 0; while (*miaarr--); while (*miarr++) len++;
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Re: [C] Conteggio degli elementi in un puntatore ad array
Quote:
Non puoi inizialare un array in quella maniera semplicemente perchè non ne hai allocato lo spazio Per funzionare quella cosa deve essere così : char *miaarr; (per inizialare 4 elementi) miaarr = calloc(4, sizeof(char)); Poi puoi dare ai singoli elementi dell' array i valori che vuoi . In definitiva lo spazio lo allochi tu , gli array hanno sempre una dimensione decisa da te , la loro dimensione non viene decisa automaticamente dal compilatore, quindi non serve contarne la dimensione , dato che dovresti già saperla tu . Il tuo metodo va in segmentation fault perchè usando il puntatore in quel modo cerchi di accedere ad un area di memoria protetta non allocata per l'applicazione che cerca di accederci. Ciao
__________________
GPU Compiler Engineer |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
OK, grazie, ho capito fin qui.
La domanda principale è però: se io la dichiaro come variabile globale in "main.c", ne alloco e riempio lo spazio in "main.c", lo libero e lo rialloco in "altro.c" con diversa grandezza (in poche parole se lo spazio in questione è soggetto a cambiamento), non c'è comunque un metodo per contarne gli elementi?
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Quote:
Il conteggio delle dimensioni degli array è comunque impossibile , perchè non c'è nessuna regola in C che vieti l'overflow degli array (e quindi non c'è modo che il programma venga a conoscenza che questo evento è successo), in pratica niente in C controlla che il tuo programma ha superato l'ultimo elemento dell' array e avvisa il programma di ciò , è unicamente compito del programmatore conoscere la dimensione degli array allocati nella memoria e gestirli a dovere , se non lo fa il risultato è quello che hai ottenuto poco fa , "Segmentation Fault" Ciao
__________________
GPU Compiler Engineer |
|
|
|
|
|
|
#5 | ||
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
Quote:
Vabbe', grazie lo stesso. Ciao!
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
||
|
|
|
|
|
#6 | ||
|
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Quote:
Quote:
Ciao
__________________
GPU Compiler Engineer |
||
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Per gli array statici si può fare:
int c[] = {8,9,7,5}; printf("%d\n", sizeof(c)/sizeof(int)); |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Quote:
Si , è vero , questo si può fare su quelli statici , ma non su quelli dinamici come nell'e sempio, comunque in quanto proprio array "statici" di una dimensione prefissata inizialmente dal programmatore risulta ancora + inutile calcolarne la dimensione Ciao
__________________
GPU Compiler Engineer |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Chiaro...
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Ah, ora e' tutto chiaro, hai ragione.
Grazie mille, sei stato utilissimo!
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#11 | |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
Attenzione: funziona solo con gli array, non con i puntatori!
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Ok, ma come ho gia' detto, faro' in un altro modo. In effetti era un problema che non avevo mai incontrato, ma ora che sto provando a clonare "Il giudizio giudizioso" (trovate il download su Punto Informatico) in C con le GTK+ mi sono trovato a dover ottenere il numero di elementi in una array di char * e non volevo aggiornare il valore ad ogni aggiunta/rimozione, quindi cercavo un metodo per poterlo trovare dinamicamente durante l'esecuzione.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:53.



















