strcpy拷贝结构体成员中的字符数组溢出的问题
结构体定义:
typedef struct env
{
char env_name[10];
char env_val[20];
int is_used; //标志位,为0则表示该环境变量没有用,为1表示环境变量已经使用了
}env_t;
env_t envset[MAX_ENV_NUM];
在给成员name 使用strcpy赋值时发现出错:
void env_init(void)
{
memset((char *)envset, 0, sizeof(envset)); //为环境变量envset开辟一个内存空间,大小是这个变量的字节数
//并且将这个的开辟的空间全部置为0
//第一个环境变量
strcpy(envset[0].env_name, "g_bootdelay");
strcpy(envset[0].env_val, "5");
envset[0].is_used = 1;
环境变量初始化完成后去打印envset[0].env_name的值时:
printf("cmd parser后:envset[0].env_name = %s, envset[0].env_val = %s.\n", envset[0].env_name, envset[0].env_val);
结果是:envset[0].env_name= g_bootdela5
envset[0].env_name= 5
原因是给字符数组envset[0].env_name赋值时超过了它定义时的大小char env_name[10];10个。所以会出现奇怪现象。
我画了一个图能够形象的说明问题: