Guest User

Untitled

a guest
Jul 19th, 2018
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.74 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. const int DEFAULT_STRING_LENGTH = 30;
  5. const int REALLOC_FACTOR = 1.5f;
  6.  
  7. //vergleicht, ob die größe eines arrays über max_size liegt und erweitert speicher dementsprechend
  8. char* check_size_and_realloc(char* array, int max_size, int array_size)
  9. {
  10. //es ist wahrscheinlicher, dass ein eingegebener string, der sowieso schon relativ lange ist, noch einmal um ein ganzes stück anwächst,
  11. //als dass er um eine konstante größe anwächst (z.B. +10). diese wahrscheinlichkeit erhöht sich noch weiter, je länger der string wird.
  12. //Deswegen wird hier die array größe um einen faktor REALLOC_FACTOR verfielfacht, anstatt die größe nur um eine konstante zu erhöhen
  13. return max_size == array_size ? realloc(array,array_size*REALLOC_FACTOR) : array;
  14. }
  15.  
  16. //Liest einen beliebig langen String aus stdin und liefert ihn zurück.
  17. char* get_str()
  18. {
  19. char* string = malloc(sizeof(char)*DEFAULT_STRING_LENGTH);
  20.  
  21. char next_typed_char;
  22. int array_size = 0;
  23. int total_typed_chars;
  24. for(total_typed_chars=0; (next_typed_char = getchar()) != '\n'; ++total_typed_chars)
  25. {
  26.  
  27. string[total_typed_chars] = next_typed_char;
  28. ++array_size;
  29.  
  30. //falls buchstaben mehr werden als array_größe, array erweitern
  31. string = check_size_and_realloc(string,total_typed_chars,array_size);
  32. }
  33. //Schauen, ob noch Platz fürs \0 is
  34. string = check_size_and_realloc(string,++total_typed_chars,array_size);
  35. string[total_typed_chars] = '\0';
  36.  
  37. return string;
  38. }
  39.  
  40. int main(int argc, char** args)
  41. {
  42. char* string = get_str();
  43.  
  44. printf("%s",string);
  45.  
  46. free(string);
  47.  
  48. return 0;
  49. }
Add Comment
Please, Sign In to add comment