我有以下代码:警告如何发生警告函数'memcpy'发生可能的数据溢出,以及如何解决它?
#define NUM_PEOPLE 20
#define TIME_PEOPLE 10
typedef struct
{
int name;
int age;
} People
typedef struct
{
int number;
int post;
} Contact;
typedef struct
{
int number;
Pepole people[TIME_PEOPLE][NUM_PEOPLE];
Contact contact[NUM_PEOPLE];
} Master;
typedef struct
{
int number;
People people[NUM_PEOPLE][NUM_PEOPLE];
Contact contact[NUM_PEOPLE];
} Info;
Info info;
Master master;
int counter = 1
int size;
int offset = 0;
while(counter > 0)
{
size = TIME_PEOPLE;
if(counter == 1)
{
size = NUM_PEOPLE - (TIME_PEOPLE * (offset + 1));
}
memcpy(&info.people[TIME_PEOPLE + TIME_PEOPLE * offset][0], &master.people[0][0],
sizeof(People) * size * NUM_PEOPLE);
offset ++;
counter --;
}
,但我得到了以下警告:
Warning 669: Possible data overrun for function 'memcpy(void *, const void *, unsigned int)', argument 3 ,
我做了这个代码,因为NUM_PEOPLE
可能被更改为小于TIME_PEOPLE
,那么此警告的发生,如何解决它?
P.S.如果TIME_PEOPLE
更改为8
,这意味着我们需要复制三次才能填满info
不知道它是否会引起您的警告,但有两个明显的问题:'人'拼写错误'Master'结构声明,并且'offset'从未设置(您应该得到“set before set”警告)。一般来说,我倾向于使用'memmove()'而不是'memcpy()'。 –
我修改了偏移部分,初始值为0 – user2131316
这个确切的代码和问题在其他文章中被询问和回答。必须是作业分配... – 2013-06-24 18:54:25