struct MYINFO
{
char name[20];
char ip[20];
char sex[2];//问题就在于这个元素,赋值的时候,谁在它后面,就会把后面的值也带上
//如果后面没有元素或者不给后面元素赋值,就没错了
char age[3];
char addr[120];
};//头文件事先定义的结构体 MYINFO info;
memset(&info,0,sizeof(info)); memcpy(info.name,"这是名字",20);
memcpy(info.ip,"这是IP",20);
memcpy(info.sex,"男",2);
memcpy(info.age,"20",3);
memcpy(info.addr,"这是地址",120);//.cpp中给它赋值结果,sex这里老是会出错,具体的请看图:
这张图没有问题,还没运行到age
这张图里面,sex后面跟上了age
这张图我没给age赋值,结果sex后面跟上了addr问题:
1.为什么?
2.为什么只是sex这个元素会这样,其他的都不会?
系统给结构体对象分配内存时是连续的一段地址空间。你这个char sex[2];不足以存放汉字字符串(字符串还有个结束符需要一个char空间来存储),但是整段结构体内存是连续的,所以memcpy操作可以把这个汉字字符串写到超出 sex[2]的地址段里。只不过你访问 info.sex 的时候得到的结果并不是 “男”,而是包含了后面的。
注意:memcpy()函数并不是遇到字符串结束符 '\0'就停止,而是会把这个 '\0'也复制。