Advertisement
Guest User

le cose fatte bene

a guest
Jul 23rd, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.75 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h> // per malloc
  3.  
  4. #define DIM 100
  5.  
  6. int strlon(char *stringa){
  7.     int i;
  8.    
  9.     for(i=0; *(stringa + i) != '\n'; i++){ // usando l'aritmentica dei puntatori
  10.         // non faccio un cazzo qui dentro XD
  11.     }
  12.    
  13.     return i;
  14. }
  15.  
  16. int main(){
  17.     char *stringa;
  18.    
  19.     // a noi servono tanti byte quanti sono quelli di una stringa lunga al massimo DIM char
  20.     // quindi ci servono sizeof(char) * DIM byte, quindi malloc
  21.     stringa = malloc(sizeof(char) * DIM);
  22.    
  23.     /*
  24.     malloc chiede al sistema operativo di riservare tot byte (espressi con il suo argomento) per il nostro vettore in memoria heap
  25.     nell'altro modo era salvato nello stack del programma (cioè char stringa[DIM])
  26.     una volta avuta la memoria a disposizione, malloc ritorna l'indirizzo del primo elemento
  27.     se hai finito la ram... o per altri n motivi malloc dovesse fallire, ritorna NULL
  28.     quindi eseguiamo un controllo dell'avvenuta allocazione della memoria
  29.     */
  30.    
  31.     if(stringa == NULL){
  32.         perror("Error");
  33.         exit(42);
  34.     }
  35.    
  36.     // P.S. la dimensione la puoi specificare anche in runtime, quindi prendere DIM con lo scanf
  37.     // o un valore che il programma stesso calcola in base ad altre cose (è questa la potenza dell'allocazione dinamica)
  38.     // questa cosa non puoi farla con l'allocazione statica sullo stack
  39.     // o meglio puoi farla per piccoli valori, poi crasha il programma
  40.    
  41.     printf("Inserisci una stringa: ");
  42.    
  43.     fgets(stringa,DIM,stdin);
  44.    
  45.     printf("La stringa è lunga %d caratteri.\n",strlon(stringa));
  46.    
  47.     free(stringa); // libero la memoria usata per evitare memory leak (DA FARE SEMPRE DOPO AVER USATO LE FUNZIONI TIPO MALLOC)
  48.    
  49.     return 0;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement