strncmp原始碼分析傳入空指標會引起宕機原因

2021-09-25 05:22:40 字數 938 閱讀 6664

strncmp原始碼分析傳入空指標會引起宕機原因

strncmp函式為字串比較函式,字串大小的比較是以ascii 碼表上的順序來決定,此順序亦為字元的值。其函式宣告為int strncmp ( const char * str1, const char * str2, size_t n );功能是把 str1 和 str2 進行比較,最多比較前 n 個位元組,若str1與str2的前n個字元相同,則返回0;若s1大於s2,則返回大於0的值;若s1 小於s2,則返回小於0的值。

以下貼出原始碼:

/* compare no more than n characters of s1 and s2,

returning less than, equal to or greater than zero

if s1 is lexicographically less than, equal to or

greater than s2. */

int strncmp (const char *s1, const char *s2, size_t n)

while (--n4 > 0);

n &= 3;

}while (n > 0)

return c1 - c2;

}

從原始碼中我們可以看到,原始碼並沒有對傳入的字串進行非空防護判斷,直接對傳入的字串進行操作,

c1 = (unsigned char) *s1++;

c2 = (unsigned char) *s2++;

所以strncmp是需要自行進行非空防護,不然會引起程式異常、宕機等現象。

但是有心人會注意到,為什麼會進行相同的四次取值判斷呢,原因是與cpu處理器進行流水線操作時的分支**有關係,這麼做可以讓其每四次才經歷一次分支**。如果不相信可以自測一番。

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...

思科VPP原始碼分析(dpo機制原始碼分析)

vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...

redux原始碼分析(三) 原始碼部分

下面是每個部分的一些解讀 createstore apicreatestore reducer,initialstate enhancer 曾經非常好奇這個函式的第二個引數到底是initialstate還是enhancer,因為見過兩種寫法都有的,以為是版本問題。看了原始碼才發現,都可以的。如果你不...