srtlen實現以及與sizeof的比較

2022-06-13 06:45:07 字數 1941 閱讀 1490

這裡僅為個人整理,大部分來自百科

一、strlen函式

strlen所作的僅僅是乙個計數器的工作,它從記憶體的某個位置(可以是字串開頭,中間某個位置,甚至是某個不確定的記憶體區域)開始掃瞄,直到碰到第乙個字串結束符'\0'為止,然後返回計數器值(長度不包含'\0')。

1、用法:

針對碰到第乙個字串結束'\0'為止的兩點說明:

(1)見下例:

1

char a[10]=;

2 cout結果為0

從開始到遇到乙個'\0'為止。

(2)見下例:

1

char a[10

];2 cout此處結果不定

從開始到遇到乙個'\0'為止。

2、函式實現

1

/*遞迴版

*/2 size_t strlen(const

char *pstr)39

else

10return0;

11}1213

/*非遞迴版

*/14 size_t strlen(const

char *pstr)

1523

rturn psize;

24 }

二、sizeof

sizeof是c/c++中的乙個操作符(operator),簡單的說其作用就是返回乙個物件或者型別所佔的記憶體位元組數。sizeof( )返回的是變數宣告後所佔的記憶體數,不是實際長度。

1、這是乙個依賴編譯系統的值,標頭檔案為stddef.h中,一般定義為:

1 typedef unsigned int size_t;

2、語法

1

sizeof(object); //

sizeof(物件);

2sizeof(type_name); //

sizeof(型別);

3sizeof

object; //

sizeof 物件;和第一行比少乙個括號

三、strlen函式和sizeof的區別

(1)sizeof不是函式,僅僅是乙個取位元組運算子,strlen是函式;

(2)sizeof可以用型別做引數,strlen只能用char*做引數,且必須是以''\0''結尾的;

(3)陣列做sizeof的引數不退化,傳遞給strlen就退化為指標了;

更多見百科。

區別舉例:

(1)針對靜態陣列:

1

char str[20]="

0123456789";

2int a=strlen(str); //

a=10

3int b=sizeof(str); //

b=20;

(2)針對指標

1

char* ss = "

0123456789

"; //

ss是指向字串常量的字元指標

2sizeof(ss) //

結果 4,sizeof 獲得的是乙個指標的值所佔的空間,應該是長整型的,所以是4

3sizeof(*ss) //

結果 1, *ss是第乙個字元 其實就是獲得了字串的第一位'0' 所佔的記憶體空間,是char型別的,佔了 1 位

4 strlen(ss)= 10

//如果要獲得這個字串的長度,則一定要使用 strlen

注:從對比知,若想獲得乙個字串的長度,一定要使用strlen

Google Hacking 的實現以及應用 轉

前言 google hacking其實並算不上什麼新東西,在早幾年我在一些國外站點上就看見過相關的介紹,但是由於當時並沒有重視這種技術,認為最多就只是用來找找未改名的mdb或者別人留下的webshell什麼的,並無太大實際用途.但是前段時間仔細啃了些資料才猛然發覺google hacking其實並非...

google hacking的實現以及應用

google hacking其實並算不上什麼新東西,在早幾年我在一些國外站點上就看見過相關的介紹,但是由於當時並沒有重視這種技術,認為最多就只是用來找找未改名 的mdb或者別人留下的webshell什麼的,並無太大實際用途.但是前段時間仔細啃了些資料才猛然發覺google hacking其實並非如此...

Google Hacking的實現以及應用

google hacking其實並算不上什麼新東西,在早幾年我在一些國外站點上就看見過相關的介紹,但是由於當時並沒有重視這種技術,認為最多就只是用來找找未改名的mdb或者別人留下的webshell什麼的,並無太大實際用途.但是前段時間仔細啃了些資料才猛然發覺google hacking其實並非如此簡...