C和彙編 sizeof運算子和strlen函式

2021-10-04 11:13:39 字數 2912 閱讀 8907

sizeof

sizeof是c語言的內建運算子,以位元組為單位給出指定型別的大小。

程式:

#include

反彙編:

5

:int a=8;

00401028 c7 45 fc 08

0000

00 mov dword ptr [ebp-4]

,86:

int b =

sizeof

(a);

0040102f c7 45 f8 04

0000

00 mov dword ptr [ebp-8]

,47:

//printf("a占用位元組=%u\n",sizeof(a));8:

printf

("a占用位元組=%d\n"

,b);

00401036

8b 45 f8 mov eax,dword ptr [ebp-8]

00401039

50 push eax

0040103a 68

1c 20

4200 push offset string "a\xd5\xbc\xd3\xc3\xd7\xd6\xbd\xda=%d\n"

(0042201c)

0040103f e8 2c 00

0000 call printf (

00401070

)00401044

83 c4 08 add esp,

8

我們看int b = sizeof(a);的反彙編:

0040102f c7 45 f8 04

0000

00 mov dword ptr [ebp-8]

,4

直接就將4傳過來了,所以sizeof不是乙個函式,只是乙個運算子,是計算乙個變數所占用記憶體的位元組數

strlen函式

strlen()函式給出字串中的字元長度。使用strlen函式,必須包含string.h庫

程式:

#include

#include

/* 提供strlen()函式的原型 */

intmain

(void

)

hello d1l1endh的長度是14,注意strlen計算的不是str陣列所占用的空間的大小(不是40)

反彙編看一下:

6

:int len=

strlen

(str)

;0040d752 8d 55 d8 lea edx,

[ebp-

28h]

0040d755 52 push edx

0040d756 e8 85

8f ff ff call strlen (

004066e0

)0040d75b 83 c4 04 add esp,

40040d75e 89

45 d4 mov dword ptr [ebp-

2ch]

,eax7:

printf

("len=%d\n"

,len)

;0040d761 8b 45 d4 mov eax,dword ptr [ebp-

2ch]

0040d764 50 push eax

0040d765 68

1c 20

4200 push offset string "a\xd5\xbc\xd3\xc3\xd7\xd6\xbd\xda=%d\n"

(0042201c)

0040d76a e8 01

39 ff ff call printf (

00401070

)0040d76f 83 c4 08 add esp,88

:return0;

0040d772 33 c0 xor eax,eax9:

10:}

[ebp-28h]`是str的首位址,把str的首位址壓入棧中,然後呼叫strlen函式

我們知道字串是以\0為結尾的,strlen的工作原理是當讀取\0時,將不再計算長度,返回長度。

#include

#include

/* 提供strlen()函式的原型 */

intmain

(void

)

上面的程式在h後面加上了\0,結果依然為14

sizeof運算子和size t型別

sizeof的作用 sizeof是c的運算子之一,用於獲取運算元被分配的記憶體空間,以位元組單位表示.這裡指的運算元,可以是變數,也可以是資料型別,如int,float等.所以就可以通過它來獲取本地c庫定義的基本型別的範圍。sizeof的使用 1.對於一般變數,形式2種 sizeof a 或 siz...

sizeof運算子和size t型別

sizeof的作用 sizeof是c的運算子之一,用於獲取運算元被分配的記憶體空間,以位元組單位表示.這裡指的運算元,可以是變數,也可以是資料型別,如int,float等.所以就可以通過它來獲取本地c庫定義的基本型別的範圍。sizeof的使用 1.對於一般變數,形式2種 sizeof a 或 siz...

運算子sizeof和函式strlen

以下全摘自網路,侵刪致歉 在 c 語言中,sizeof 是乙個判斷資料型別或者表示式長度的運算子,對 sizeof 的處理在編譯階段進行。作用 判斷資料型別長度符的關鍵字 過程 位元組數的計算在程式編譯時進行 返回值 記憶體所佔位元組數 sizeof是c c 中的乙個操作符 operator 簡單的...