C語(yǔ)言安全編碼之?dāng)?shù)值中的sizeof操作符
通常來(lái)說(shuō)獲取數(shù)組的長(zhǎng)度時(shí)不要對(duì)指針應(yīng)用sizeof操作符。
現(xiàn)來(lái)看看下面這段代碼:
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])這種用法確定這個(gè)數(shù)組的元素?cái)?shù)量,但由于array是一個(gè)形參,因此它是指針類型,sizeof(array) = sizeof(int *) = 4 (32位OS)
當(dāng)sizeof操作符應(yīng)用于聲明為數(shù)組或函數(shù)類型的形參時(shí),它會(huì)產(chǎn)生經(jīng)過(guò)調(diào)整的(指針)類型的長(zhǎng)度
對(duì)此問(wèn)題的解決方案如下:
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++中用棧來(lái)判斷括號(hào)字符串匹配問(wèn)題的實(shí)現(xiàn)方法
這篇文章主要介紹了C++中用棧來(lái)判斷括號(hào)字符串匹配問(wèn)題的實(shí)現(xiàn)方法,是一個(gè)比較實(shí)用的算法技巧,包含了關(guān)于棧的基本操作,需要的朋友可以參考下2014-08-08C++的cout.tellp()和cout.seekp()語(yǔ)法介紹
無(wú)論是使用 cout 輸出普通數(shù)據(jù),用 cout.put() 輸出指定字符,還是用 cout.write() 輸出指定字符串,數(shù)據(jù)都會(huì)先放到輸出流緩沖區(qū),待緩沖區(qū)刷新,數(shù)據(jù)才會(huì)輸出到指定位置,本文給大家介紹一下C++的cout.tellp()和cout.seekp()語(yǔ)法,需要的朋友可以參考下2023-09-09C語(yǔ)言簡(jiǎn)明講解快速排序的應(yīng)用
快速排序由于排序效率在同為O(N*logN)的幾種排序方法中效率較高,因此經(jīng)常被采用,再加上快速排序思想----分治法也確實(shí)實(shí)用,因此很多軟件公司的筆試面試,包括像騰訊,微軟等知名IT公司都喜歡考這個(gè),還有大大小的程序方面的考試如軟考,考研中也常常出現(xiàn)快速排序的身影2022-05-05C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之圖書借閱系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之圖書借閱系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03C++?Socket實(shí)現(xiàn)TCP與UDP網(wǎng)絡(luò)編程
本文主要介紹了C++?Socket實(shí)現(xiàn)TCP與UDP網(wǎng)絡(luò)編程,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01