#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;
}
