C語言安全編碼之數(shù)值中的sizeof操作符
通常來說獲取數(shù)組的長度時不要對指針應用sizeof操作符。
現(xiàn)來看看下面這段代碼:
void clear(int array[]) { for(size_t i = 0; i < sizeof(array) / sizeof(array[0]); i++) { array[i] = 0; } } void dowork(void) { int dis[12]; clear(dis); /*...*/ }
clear()使用sizeof(array) / sizeof(array[0])這種用法確定這個數(shù)組的元素數(shù)量,但由于array是一個形參,因此它是指針類型,sizeof(array) = sizeof(int *) = 4 (32位OS)
當sizeof操作符應用于聲明為數(shù)組或函數(shù)類型的形參時,它會產(chǎn)生經(jīng)過調(diào)整的(指針)類型的長度
對此問題的解決方案如下:
void clear(int array[], size_t len) { for(size_t i = 0; i < len; i++) { array[i] = 0; } } void dowork(void) { int dis[12]; clear(dis, sizeof(dis) / sizeof(dis[0])); /*...*/ }
相關(guān)文章
C++的cout.tellp()和cout.seekp()語法介紹
無論是使用 cout 輸出普通數(shù)據(jù),用 cout.put() 輸出指定字符,還是用 cout.write() 輸出指定字符串,數(shù)據(jù)都會先放到輸出流緩沖區(qū),待緩沖區(qū)刷新,數(shù)據(jù)才會輸出到指定位置,本文給大家介紹一下C++的cout.tellp()和cout.seekp()語法,需要的朋友可以參考下2023-09-09C語言數(shù)據(jù)結(jié)構(gòu)之圖書借閱系統(tǒng)
這篇文章主要為大家詳細介紹了C語言數(shù)據(jù)結(jié)構(gòu)之圖書借閱系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03C++?Socket實現(xiàn)TCP與UDP網(wǎng)絡編程
本文主要介紹了C++?Socket實現(xiàn)TCP與UDP網(wǎng)絡編程,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01