106 弹性结构成员

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

typedef struct tagHyperIDCard {
    long serialNo;
    char name[32];
    char *phoneNo[];
} HyperIDCard;

void print_hyperidcard(HyperIDCard *ph, int phones)
{
    if (ph) {
        if (ph->serialNo < 200000)
            ph->serialNo += 200000;
        printf( "%15s: %ld\n"
                "%15s: %s\n",
                "ID SerialNo.", ph->serialNo,
                "ID name", ph->name);
        for (int p = 0; p < phones; p++) {
            printf("%13s% 2d: %s\n",
                "phone#", p+1, ph->phoneNo[p]);
        }   
        printf("-------------------------\n");
    }   
}

int main(int argc, char *argv[])
{
    HyperIDCard hid1 = { 200201, "y1" };
    //HyperIDCard hid1 = { 200201, "y1", { "0" } };
    print_hyperidcard(&hid1, 0); 
    HyperIDCard *ph2 = malloc(sizeof(HyperIDCard) +
        2 * sizeof(char *));
    if (ph2) {
        ph2->serialNo = 200202;
        strcpy(ph2->name, "y2");
        ph2->phoneNo[0] = "13012345678";
        ph2->phoneNo[1] = "13112345678";
    }   
    print_hyperidcard(ph2, 2); 
    HyperIDCard *ph3 = malloc(sizeof(HyperIDCard) +
        3 * sizeof(char *));
    ph3->phoneNo[0] = "0";
    ph3->phoneNo[1] = "0";
    ph3->phoneNo[2] = "0";
    if (ph3)
        *ph3 = *ph2;
    print_hyperidcard(ph3, 3);
    return 0;
}