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 簡單的...