Linux C 的可变长数组

#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的值,为数组在栈上分配适当大小的空间。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://127.0.0.1/wyyxgf.html