關於C語言指標的不安全操作

2021-05-17 14:09:46 字數 682 閱讀 2894

昨天,剛剛請教了劉老師,對c語言指標的不安全操作有了乙個更深刻的認識。

初學指標的人,往往對char *p="hello world"式的賦值認為理所當然,最造成的「該記憶體不能written」式的錯誤不知所措。

其實那是乙個指標指向了字串常量的開始位址,該位址的內容是唯讀的,自然不能write.

指標:首先,我們要知道,char *p是宣告了乙個指標,但我們並沒有要求它指向哪片記憶體區域,因此它是隨機指向了某個地方。至於這個地方,既可能是空白記憶體區域,也可能是我們已經存放了資料的區域。若是前者,則無關緊要。若是後者,則會造成資料的覆蓋,使得程式受損,從而崩潰。這就是所謂的不安全指標運用。

那麼,如何做到安全的使用指標呢?

其實很簡單,牢記「永遠讓指標指向你所要的地方」,而不要讓它隨機指向某個地方。這樣,就防止了對有用資料的破壞,消除了不安全因素。例如:

char string="hello world";

char *p;

p=string;

好了,這就使得*p指向了我們開闢的字串string的頭部,一切都是安全的(除非你讓指標位址增加時的增量增加到了字串所佔記憶體區域結束之後的地方,或減少到了這片記憶體的前方)。

不學好指標,就不算學好了c語言。因為高階語言裡只有c語言能如此靈活強大的直接控制硬體,是對mcu控制的首先語言。這就是我們學c的前途所在。

好好學c,做驅動,做os

c語言不安全庫 C語言 那些不安全的庫函式

c語言 那些不安全的庫函式 c和c 不能夠自動地做邊界檢查,邊界檢查的代價是效率。一般來講,c 在大多數情況下注重效率。然而,獲得效率的代價是,c 程式設計師必須十分警覺以避免緩衝區溢位問題。c語言標準庫中的許多字串處理和io流讀取函式是導致緩衝區溢位的罪魁禍首。我們有必要了解這些函式,在程式設計中...

c語言不安全庫 C語言 一些不安全的庫函式

那些不安全的庫函式 c 和 c 不能夠自動地做邊界檢查,邊界檢查的代價是效率。一般來講,c 在大多數情況下注重效率。然而,獲得效率的代價是,c 程式設計師必須十分警覺以避免緩衝區溢位問題。c語言標準庫中的許多字串處理和io流讀取函式是導致緩衝區溢位的罪魁禍首。我們有必要了解這些函式,在程式設計中多加...

關於atomic到底安不安全

atomic 實際上相當於乙個引用計數器,這個大家很熟悉,如果被標記了atomic,那麼被標記了的記憶體本身就有了乙個引用計數器,第乙個占用這塊記憶體的執行緒,會給這個計數器 1,在這個執行緒操作這塊記憶體期間,其他執行緒在訪問這個記憶體的時候,如果發現 引用計數器 不為0,則阻塞,實際上阻塞並不等...