C和汇编---sizeof运算符和strlen函数
生活随笔
收集整理的這篇文章主要介紹了
C和汇编---sizeof运算符和strlen函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
sizeof
sizeof是C語言的內置運算符,以字節為單位給出指定類型的大小。
程序:
反匯編:
5: int a=8; 00401028 C7 45 FC 08 00 00 00 mov dword ptr [ebp-4],8 6: int b = sizeof(a); 0040102F C7 45 F8 04 00 00 00 mov dword ptr [ebp-8],4 7: //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 42 00 push offset string "a\xd5\xbc\xd3\xc3\xd7\xd6\xbd\xda=%d\n" (0042201c) 0040103F E8 2C 00 00 00 call printf (00401070) 00401044 83 C4 08 add esp,8我們看int b = sizeof(a);的反匯編:
0040102F C7 45 F8 04 00 00 00 mov dword ptr [ebp-8],4直接就將4傳過來了,所以sizeof不是一個函數,只是一個運算符,是計算一個變量所占用內存的字節數
strlen函數
strlen()函數給出字符串中的字符長度。使用strlen函數,必須包含string.h庫
程序:
#include <stdio.h> #include <string.h> /* 提供strlen()函數的原型 */ int main(void) {char str[40]="hello d1l1endh";int len=strlen(str);printf("len=%d\n",len);return 0;}hello d1l1endh的長度是14,注意strlen計算的不是str數組所占用的空間的大小(不是40)
反匯編看一下:
[ebp-28h]`是str的首地址,把str的首地址壓入棧中,然后調用strlen函數
我們知道字符串是以\0為結尾的,strlen的工作原理是當讀取\0時,將不再計算長度,返回長度。
上面的程序在h后面加上了\0,結果依然為14
總結
以上是生活随笔為你收集整理的C和汇编---sizeof运算符和strlen函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 颐和园持年卡要预约吗
- 下一篇: 远控免杀专题12--Green-Hat-