欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當前位置:主頁 > 軟件編程 > C語言 >

C語言安全之數(shù)組長度與指針實例解析

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C語言|點擊: 次

1.C語言編碼需要保證變長數(shù)組的長度參數(shù)位于合法范圍之內(nèi)

例如以下代碼:

void func(size_t s) {
 int vla[s];
 /*...*/
}
/*...*/
func(size);
/*...*/

解決方案如下:

enum {MAX_ARRAY = 1024};
void func(size_t s) {
 if(s < MAX_ARRAY && s != 0) {
  int vla[s];
  /*...*/
 } else {
  //錯誤處理
 }
}
/*...*/
func(size);
/*...*/

2.需要保證復(fù)制的目標具有足夠的存儲空間

參考代碼如下所示:

enum {WORKSPACE_SIZE = 256};
void func(const int src[], size_t len) {
 int dest[WORKSPACE_SIZE];
 if(len > WORKSPACE_SIZE) {
  //錯誤處理
 }
 memcpy(dest, src, sizeof(int) * len);
 /*...*/
}

3.不要把一個指向非數(shù)組對象的指針加上或減去一個整數(shù)

錯誤代碼如下所示:

struct numbers {
 short num1;
 short num2;
 /*...*/
 short num9;
};
int sum_numbers(const struct numbers *numb) {
 int total = 0;
 const int *numb_ptr;
 for(numb_ptr = &numb->num1; numb_ptr <= &numb->num9; numb_ptr++) {
  total += *(numb_ptr);
 }
 return total;
}
int main(void) {
 struct numbers my_numbers = {1,2,3,4,5,6,7,8,9};
 sum_numbers(&my_numbers);
 return 0;
}

上面的代碼試圖用指針運算訪問結(jié)構(gòu)的元素,這是危險的,因為結(jié)構(gòu)中的字段并不保證在內(nèi)存中是連續(xù)的

解決方案(使用數(shù)組)如下:

struct numbers {
 short num1;
 short num2;
 /*...*/
 short num9;
};
int sum_numbers(const short *numb, size_t dim) {
 int total = 0;
 const int *numb_ptr;
 for(numb_ptr = numb; numb_ptr < numb + dim; numb_ptr++) {
  total += *(numb_ptr);
 }
 return total;
}
int main(void) {
 short my_numbers[9] = {1,2,3,4,5,6,7,8,9};
 sum_numbers(my_numbers, sizeof(my_numbers) / sizeof(my_numbers[0]));
 return 0;
}

上一篇:C++操作SQLite簡明教程

欄    目:C語言

下一篇:C語言實現(xiàn)的一個萬年歷小程序

本文標題:C語言安全之數(shù)組長度與指針實例解析

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/3635.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進行處理、任何非本站因素導致的法律后果,本站均不負任何責任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有