memcpy的错误
#include <memory.h>
struct test1{
void * data;
int datalen;
unsigned char afdata[0];
};
int main()
{
struct test1 tt;
tt.data=tt.afdata;
memcpy(tt.data, "1234 ",4);
return 1;
}
我测试一下变长结构体。但memcpy好像有错误。请指点一下,变长结构体怎么用(有一个数组成员为0长度数组),这个程序又怎么改?
[解决办法]
变长结构体并不意味着你不必分配内存了。
变长结构体常用于接口中。对方分配了一定的内存,填充数据,并以变长结构体的形式传给你。这样虽然每次结构体的实际长度都有所不同,但是接口是不变的。
现在tt在栈中分配,按照它的定义,afdata只有长度0,当然不能接受4个字符的copy了。
[解决办法]
type struct tagTest
{
int uID;
int iNum;
int offset
int data[1];
} test;
data是一个数据,个数为1,但是其实在使用的时候,不一定为1,也就是说在上述结构不能
直接test tt;这样声明,必要声明成指针,然后在malloc的时候,根据iNum数目进行申请,
譬如iNum为5个int,这可以这样
p = (test *)malloc(sizeof(test) + (iNum - 1) * sizeof(int));
这样,后面的内容可以通过p-> data[i]访问了:)