首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

memcpy的异常

2012-03-04 
memcpy的错误#includememory.hstructtest1{void*dataintdatalenunsignedcharafdata[0]}intmain(){st

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]访问了:)

热点排行
Bad Request.