char FullName[];是什么用法??

TrueZq 2003-04-29 03:29:31
单独定义 char FullName[];是非法的,错误-->'FullName' : unknown size’
但放在结构体中就可以,为什么?

还有
typedef struct _nameentry {
long filenumber;
long drive;
char FullName[];
} HASH_ENTRY;

printf("sizeof(HASH_ENTRY)=%d\n",sizeof(HASH_ENTRY) ); 输出8 ,为什么不是12

//----------------------------------------------------------------------
注:
typedef struct _nameentry {
long filenumber;
long drive;
char FullName[4];
} HASH_ENTRY;
printf("sizeof(HASH_ENTRY)=%d\n",sizeof(HASH_ENTRY) ); 输出12
//----------------------------------------------------------------------
...全文
337 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
TrueZq 2003-04-29
  • 打赏
  • 举报
回复
散分!
TrueZq 2003-04-29
  • 打赏
  • 举报
回复
搞懂了,FullName在那里只是占位,即 指出偏移地址
这样在动态分配时 能最大限度节约内存。
下面CODE证明了FullName的用处。
FilemonLogHash(
int Drive,
fh_t Filenumber,
PCHAR Fullname
)
{
PHASH_ENTRY newEntry;

//
// Allocate a new entry
//
newEntry = HeapAllocate( sizeof(HASH_ENTRY) + strlen(Fullname)+1, HEAPZEROINIT );
if( !newEntry ) return;
......................
ckacka 2003-04-29
  • 打赏
  • 举报
回复
char FullName[];
被默认为
char FullName[0];


这的确是通过强制越界的办法来获得数据的常见的手法

>>可以这样验证,加上printf("%d\n", a.FullName)这一句,打印指针,
>>在链接的时候就会报错说找不到FullName.
在dev-c++ 4980里面是不报错的

>>printf("sizeof(HASH_ENTRY)=%d\n",sizeof(HASH_ENTRY) ); 输出8 ,为什么不是12
你试试
char co[0];
cout << sizeof(co) << endl;
结果一样还是0
wingfiring 2003-04-29
  • 打赏
  • 举报
回复
to atto(阿托):
你确信?

这在C代码中是一种常用的手法。通常,这样的结构头部都有一个整数来记录该结构的长度。
我们可以通过数组下标越界的办法来访问数据。就拿TrueZq (蟑螂) 的这个例子来说,通过filenumber记录FullName数组的长度。之所以允许这么做,就是表示这里会采取越界访问的方法。在很多要求二进制封装的地方,这种做法通常是很需要的。
你的问题我不知道是不是C或者C++的语言标准,我在VC和BCB中都是和你说的一样的。姑且认为是标准就这样的吧。
terrorist 2003-04-29
  • 打赏
  • 举报
回复
定义数组必须给定长度
SharpKing515 2003-04-29
  • 打赏
  • 举报
回复
基本同意。。。。楼上。。。。
atto 2003-04-29
  • 打赏
  • 举报
回复
编译器在编译时自动将空的FullName[]忽略掉了.所以输出8.

可以这样验证,加上printf("%d\n", a.FullName)这一句,打印指针,
在链接的时候就会报错说找不到FullName.

所以定义空的数组,即使编译不报错,也是不能用的,
用了就会在链接的时候报错.

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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