1. 程式人生 > >strcpy拷貝結構體成員中的字元陣列溢位的問題

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個。所以會出現奇怪現象。

我畫了一個圖能夠形象的說明問題: