1. Си / Говнокод #23488

    −6

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    #include <stdio.h>
    //аналог стрингбилдеру который есть в java!!!
    
    #define NUM 1000 //максимальный размер строки
    
    typedef struct {
    	char str[NUM];
    } StringBuilder;
    
    void append(StringBuilder *sb, char *str) //добавление строки
    {
    	sprintf(sb->str, "%s%s", sb->str, str); //гениально и просто хули
    }
    
    void setLength(StringBuilder *sb, int s)
    {
    	if(s > NUM || s < 0) return; //жуть
    	sb->str[s]='\0'; //гениальнетибл!
    }
    
    int main()
    {
    	StringBuilder sb;
    	sprintf(sb.str, "Привет америкосам");
    	printf("%s\n", sb.str);
    	append(&sb, ", я вас уделаю!");
    	printf("%s\n", sb.str);
    	setLength(&sb, 2);
    	printf("%s\n", sb.str);
    	setLength(&sb, 0);
    	printf("%s\n", sb.str);
    	return 0;
    }

    понос или не понос вот в чем вопрос

    Запостил: pawn-master, 04 Ноября 2017

    Комментарии (1) RSS

    • У нас в ответ б-гомерзкой Java есть realloc

      P.S. Утро начинается не с кофе:https://ideone.com/5tJQn1
      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>
       
      typedef struct {
        char *str;
      } StringBuilder;
       
      void append(StringBuilder *sb, const char *str) {
          if (!str) return;
       
          const size_t len = sb->str ? strlen(sb->str) : 0;
          char *newstr = (char *) realloc(sb->str, len + strlen(str) + 1);
          if (newstr) {
              sb->str = newstr;
              strcpy(newstr + len, str);
          }
      }
       
      void setLength(StringBuilder *sb, size_t n) { 
          char *newstr = (char *) realloc(sb->str, n + 1);
          if (newstr) {
              sb->str = newstr;
              sb->str[n] = '\0';
          }
      }
       
      int main() {
          StringBuilder sb = { .str = 0 };
          append(&sb, "Привет америкосам");
          printf("%s\n", sb.str);
          append(&sb, ", я вас уделаю!");
          printf("%s\n", sb.str);
          setLength(&sb, 2);
          printf("%s\n", sb.str);
          setLength(&sb, 0);
          printf("%s\n", sb.str);
          return 0;
      }
      Ответить

    Добавить комментарий