>>54
こんなんじゃだめ? (offsetofは標準じゃなかったはずだが、同等のマクロがどっかにあるはず)
typedef struct {
 size_t size;
 char buffer[1];
} string_t;
string_t *string_new(size_t size) {
 string_t *s;
 if ((s = malloc(offsetof(string_t, buffer) + size)) == NULL) {
   return NULL;
 }
 s->size = size;
 return s;
}