#include <stdio.h>   
#include <stdlib.h>   
#include <string.h>   
   
static char arry_b[0];   
   
void lengthen_arry(int n)   
{   
    const char *head = "headstr-";   
    const char *tail = "tailstr";   
   
    char arr[n+1];   
    char vla[strlen(head) + strlen(tail) + 1];   
   
    int i;   
   
    strcpy(vla, head);   
    strcat(vla, tail);   
   
    printf("%s\n", vla);   
   
    for(i = 0; i < 5; ++i)   
    {   
        char foo[i + 2];   
        strncpy(foo, "xxxxxxxxxxx", i + 1);   
        foo[i + 1] = '\0';   
        printf("%s\n", foo);   
    }   
   
    bzero(arr, (n+1) * sizeof(char));   
   
    for (i = 0; i < n; i++) {   
   
        arr[i] = (char)('A' + i);   
        arry_b[i] = (char)('A' + i);   
   
    }   
   
    arr[n] = '\0';   
    arry_b[n] = '\0';   
    printf("length_arry:%s:%s\n", arr, arry_b);   
}   
   
typedef struct _t {   
    size_t size;   
    char *s;   
}s_t;   
   
void lengthen_arry_2(char *str)   
{   
    s_t *t;   
    t = (s_t *)malloc(sizeof (s_t) + strlen(str));   
   
    t->size = strlen(str);   
   
    t->s = (char *)t + sizeof(s_t);   
   
    strncpy(t->s, str, t->size);   
   
    printf("s_t:%s\n", t->s);   
    free(t); //只要一次释放就可以   
}   
   
int main(int argc, char *argv[])   
{   
    lengthen_arry(6);   
    lengthen_arry_2("lengthen_arry");   
    return 0;   
}  大家看看上面代码的优缺点!
/*=============*/
在C99中新加入了对变长数组的支持,即数组的长度可以由某个非const变量来定义。
可变数组的空间大小直到程序运行时才能确定,因此只有程序在运行时才能为程序分配空间。
在gcc编译器程序会在运行时根据实际指定的大小(变量当前的值)调节esp的值,为数组在栈上分配适当大小的空间。
