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个。所以会出现奇怪现象。

我画了一个图能够形象的说明问题:

猜你喜欢

转载自blog.csdn.net/weixin_41632560/article/details/83540563