0和1有什么区别?

thinkinnight 2007-04-17 02:27:29
#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[];这样是肯定可以的.
...全文
299 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2007-04-17
  • 打赏
  • 举报
回复
这些用法的目的都是一个目的,也就是C99现在明确支持的“柔性数组成员”。
thinkinnight 2007-04-17
  • 打赏
  • 举报
回复
那就是说,用1是不被标准支持的,而用0或空,是标准支持的.
但是使用1,0或空,都是可以被一定的编译器如VC,gcc(因查到有帖子说linux代码中有不少这样的trick)支持,而可以通用.
这些用法的目的都是一个目的,也就是C99现在明确支持的“柔性数组成员”。
不知道我这样理解是否正确?多谢
taodm 2007-04-17
  • 打赏
  • 举报
回复
用1使用的是C语言不进行越界检查的“漏洞”
用0或空,使用的是C99明确支持的柔性数组成员。
从方便性上说,用柔性数组成员当然优势非常大。
thinkinnight 2007-04-17
  • 打赏
  • 举报
回复
已经试过了,一个占空间,一个不占空间,用的是vc6
taodm 2007-04-17
  • 打赏
  • 举报
回复
你sizeof(name)就知道区别了。

65,213

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧