我使用sizeof来获取C中的结构体的大小,但是我得到的结果是意外的。 struct sdshdr { int len; int free; char buf[]; }; int main(){ printf("struct len:%d\n",(sizeof(struct sdshdr))); return 0; } //struct len:8, with or without buf 我的问题是为什么buf不占用任何空间,为什么在64位CPU上inttypes的大小仍然是4? 这里是gcc -v的输出: Configured with: –prefix=/Applications/Xcode.app/Contents/Developer/usr –with-gxx-include-dir=/usr/include/c++/4.2.1 Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn) Target: x86_64-apple-darwin14.4.0 Thread model: posix
我最近读到,在C中使用灵活的数组成员是糟糕的软件工程实践。 但是,这一说法没有任何论据支持。 这是一个公认的事实吗? ( 灵活的数组成员是C99中引入的一个C特性,可以声明最后一个元素是未指定大小的数组,例如:) struct header { size_t len; unsigned char data[]; };
我正在重构一些旧的代码,并发现几个包含零长度数组的结构(见下文)。 警告当然是压制杂注,但是我没有通过包含这种结构的“新”结构来创build(错误2233)。 数组'byData'用作指针,但是为什么不使用指针呢? 或长度为1的数组? 当然,没有任何意见可以让我享受这个过程…任何原因使用这样的事情? 任何意见重构这些? struct someData { int nData; BYTE byData[0]; } 注意它是C ++,Windows XP,VS 2003