0和1有什么区别?解决思路

0和1有什么区别?
#include   <stdio.h>
#include   <stdlib.h>
#include   <string.h>

typedef   struct
{
int   namelen;
char   namestr[1];
}name;

name*   makename(char   *newname)
{
name   *ret   =  
(name*)malloc(sizeof(name)-1+strlen(newname)+1);
memset(ret,0,sizeof(name)-1+strlen(newname)+1);
if(ret!=NULL)
{
ret-> namelen   =   strlen(newname);
strcpy(ret-> namestr,newname);
}

return   ret;
}

int   main()
{
name*   test;
char   str[]=   "abcd ";
test   =   makename(str);
printf( "%s\n ",test-> namestr);
}

这里的
typedef   struct
{
int   namelen;
char   namestr[1];
}name;
改为
typedef   struct
{
int   namelen;
char   namestr[0];
}name;
有没有区别?是否一定要使用1
当然char   namestr[];这样是肯定可以的.

------解决方案--------------------
用1使用的是C语言不进行越界检查的“漏洞”
用0或空,使用的是C99明确支持的柔性数组成员。
从方便性上说,用柔性数组成员当然优势非常大。