C語言的小陷阱

2021-09-22 23:02:35 字數 1547 閱讀 9631

踩坑時間(2019/5/13~2019/5/17)

char

* str_header =

null

, str_body =

null

;

正確的應該是

char

* str_header =

null

,*str_body =

null

;

這個錯誤讓我遭受了乙個執行時錯誤,給str_body分配一段堆記憶體,平安無事,再向記憶體中拷貝字串,對記憶體的非法訪問,程式就掛掉了

踩坑時間(2019/5/13~2019/5/17)

of cause not!

從前聽過乙個同事說起他的乙個遭遇,「我的程式只要新增一行輸出語句就能正確執行了,要不就不行!太邪門啦!」

沒有想到我也遇到了這個怪問題,事實證明人比計算機更容易犯錯

const size_t payload_size =

strlen

(send_body)

+strlen

(send_header_fmt)+8

;//...

send_data =

(unsigned

char*)

malloc

(payload_size)

;payload_fmt =

(unsigned

char*)

malloc

(payload_size)

;memset

(send_data,

0, payload_size)

;memset

(payload_fmt,

0, payload_size)

;strcpy((

char

*)payload_fmt, send_header_fmt)

;strcat((

char

*)payload_fmt, send_body)

;data_len =

sprintf((

char

*)send_data,

(const

char

*)payload_fmt, service_uri,\

ip, port,

sizeof

(send_body)-1

);//大約在這裡,我只有新增一行 sprinf(""); 才能得到正確的執行結果

data_len =

sprintf((

char

*)send_data,

(const

char

*)payload_fmt, service_uri,\

ip, port,

sizeof

(send_body)-1

);

至於為什麼新增一行prinf("");就能正確執行真是不知道了,但是根本的錯誤出現在第一行的payload_size寫錯,導致記憶體分配的不足和記憶體操作的錯誤

C語言(思維陷阱)

程式設計開發的初學者若能掌握 機器思維 的技巧往往能事半功倍,但熟練掌握該技能後卻要避免陷入思維陷阱。拓展 所謂機器思維,就是貼近計算機執行的原理,充分利用計算機的優勢。電腦最大的特點就是效率高,最擅長的事情就是迴圈操作,因此我們能使用迴圈來處理很多事情。但是一旦形成這樣的思維習慣,也許就會陷入思維...

C語言 數字陷阱

題目 對任意乙個自然數n 0 n 0 n 0 先將其各位數字相加求和,再將其和乘以3後加上1,變成乙個新自然數n 1 n 1 n 1 然後對n 1n 1 n1 重複這種操作,可以產生新自然數n 2n 2 n2 多次重複這種操作,運算結果最終會得到乙個固定不變的數n kn k nk 就像掉入乙個數字 ...

C語言 有符號整型 補碼表示的小陷阱

幾乎所有的 c語言 入門書籍都會在 最前面的章節裡 介紹 資料型別,而且基本都是從 整型 開始 至少我看過的基本都是這樣 不過對這個東西的運用,似乎很多人 包括我 都是粗略的看看就過去了。這裡我說一下乙個小小的陷阱,姑且算是吧。c語言標準 要求 這些資料型別必須 至少有這樣的取值範圍。即,實際上可以...