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個。所以會出現奇怪現象。
我畫了一個圖能夠形象的說明問題: