踩坑時間(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語言標準 要求 這些資料型別必須 至少有這樣的取值範圍。即,實際上可以...