#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct A
{
    char a, b, c, d, e, f ;
};

#define DYNAMICALLY_SIZED 1

struct B
{
    int sz ;
    char name[DYNAMICALLY_SIZED] ;
};

struct B* make_b( const char* name )
{
    struct B* pb = malloc( sizeof( struct B ) + strlen(name) ) ;
    if(pb) { pb->sz = strlen(name) ; strcpy( pb->name, name ) ; }
    return pb ;
}

int main()
{
    struct A a = { 'H', 'e', 'l', 'l', 'o', 0 } ;
    printf( "%s [%u]\n", &a, strlen(&a) ) ;

    struct B* ptr = make_b( &a ) ;
    puts( ptr->name ) ;
    free(ptr) ;
    
    return 0 ;
}
