Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h> // per malloc
- #define DIM 100
- int strlon(char *stringa){
- int i;
- for(i=0; *(stringa + i) != '\n'; i++){ // usando l'aritmentica dei puntatori
- // non faccio un cazzo qui dentro XD
- }
- return i;
- }
- int main(){
- char *stringa;
- // a noi servono tanti byte quanti sono quelli di una stringa lunga al massimo DIM char
- // quindi ci servono sizeof(char) * DIM byte, quindi malloc
- stringa = malloc(sizeof(char) * DIM);
- /*
- malloc chiede al sistema operativo di riservare tot byte (espressi con il suo argomento) per il nostro vettore in memoria heap
- nell'altro modo era salvato nello stack del programma (cioè char stringa[DIM])
- una volta avuta la memoria a disposizione, malloc ritorna l'indirizzo del primo elemento
- se hai finito la ram... o per altri n motivi malloc dovesse fallire, ritorna NULL
- quindi eseguiamo un controllo dell'avvenuta allocazione della memoria
- */
- if(stringa == NULL){
- perror("Error");
- exit(42);
- }
- // P.S. la dimensione la puoi specificare anche in runtime, quindi prendere DIM con lo scanf
- // o un valore che il programma stesso calcola in base ad altre cose (è questa la potenza dell'allocazione dinamica)
- // questa cosa non puoi farla con l'allocazione statica sullo stack
- // o meglio puoi farla per piccoli valori, poi crasha il programma
- printf("Inserisci una stringa: ");
- fgets(stringa,DIM,stdin);
- printf("La stringa è lunga %d caratteri.\n",strlon(stringa));
- free(stringa); // libero la memoria usata per evitare memory leak (DA FARE SEMPRE DOPO AVER USATO LE FUNZIONI TIPO MALLOC)
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement