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明确支持的柔性数组成员。
从方便性上说,用柔性数组成员当然优势非常大。
#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明确支持的柔性数组成员。
从方便性上说,用柔性数组成员当然优势非常大。