fork download
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. char *s_getany(int chunklen);
  4.  
  5. int main()
  6. {
  7. char input[2];
  8. int chunklen;
  9.  
  10. printf(" Give the length: ");
  11. fgets(input , 2 , stdin);
  12. chunklen= atoi(input);
  13.  
  14. s_getany(chunklen);
  15.  
  16. exit(EXIT_SUCCESS);
  17.  
  18. }
  19. char *s_getany( int chunklen )
  20. {
  21. int i = 0;
  22. char *s = NULL, *try = NULL;
  23.  
  24.  
  25. if ( chunklen < 1 || NULL == (s = calloc( chunklen+1, sizeof(char)) ) )
  26. return NULL; /* Αν το μήκος του string (chunklen) ειναι μικρότερο απο 1
  27.   ή ο δείκτης ειναι NULL επέστρεψε NULL */
  28.  
  29. for (i=0; EOF != (s[i] = getchar()) && s[i] != '\n'; i++) // Μέχρι να επιστραφεί EOF ή να δοθεί '\n' εκτέλεσε
  30. {
  31. if ( i != 0 && i % chunklen == 0 ) // Aπο i=1 θες αλλιώς δίνοντας 6 μήκος string μέχρι να φτάσει
  32. // στο τελευταίο στοιχείο το οποίο ειναι αυτο που έχει υπόλοιπο i με chunklen 0
  33. // δηλαδη 6/6 θα ήθελες 7 στοιχεία (απο i=0)
  34. {
  35. try = realloc(s, (i+chunklen+1) * sizeof(char) ); /* Δέσμευε κάθε φορα την κατάσταση του i +
  36.   το μέγεθος που έδωσε ο χρήστης + τον μηδενικό */
  37. if ( !try ) {
  38. free(s);
  39. s = NULL;
  40. return NULL;
  41. }
  42. s = try; // Ο s δείχνει οπου και ο try
  43. }
  44. }
  45. s[i] = '\0'; // Μanually τοποθέτηση του μηδενικού.
  46.  
  47. if ( NULL == (try = realloc(s, (i+1) * sizeof(char) )) )
  48. return NULL;
  49.  
  50. return try;
  51. }
Success #stdin #stdout 0.01s 1724KB
stdin
Standard input is empty
stdout
 Give the length: