C和匯編---sizeof運算符和strlen函數

sizeof

sizeof是C語言的內置運算符,以字節為單位給出指定類型的大小。
程序:

#include <stdio.h>int main(void)
{int a=8;int b = sizeof(a);//printf("a占用字節=%u\n",sizeof(a));printf("a占用字節=%d\n",b);return 0;
}

在這里插入圖片描述

反匯編:

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)
在這里插入圖片描述
反匯編看一下:

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,4
0040D75E 89 45 D4             mov         dword ptr [ebp-2Ch],eax
7:        printf("len=%d\n",len);
0040D761 8B 45 D4             mov         eax,dword ptr [ebp-2Ch]
0040D764 50                   push        eax
0040D765 68 1C 20 42 00       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,8
8:        return 0;
0040D772 33 C0                xor         eax,eax
9:
10:   }

[ebp-28h]`是str的首地址,把str的首地址壓入棧中,然后調用strlen函數
在這里插入圖片描述
我們知道字符串是以\0為結尾的,strlen的工作原理是當讀取\0時,將不再計算長度,返回長度。

#include <stdio.h>
#include <string.h>  /* 提供strlen()函數的原型 */
int main(void)
{char str[40]="hello d1l1endh\0abcdesf";int len=strlen(str);printf("len=%d\n",len);return 0;}

上面的程序在h后面加上了\0,結果依然為14
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/380159.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/380159.shtml
英文地址,請注明出處:http://en.pswp.cn/news/380159.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java接口程序練習

題目&#xff1a; 編寫一個接口程序&#xff0c;其中定義一個計算體積的方法。然后&#xff0c;在設計應用程序實現這個接口&#xff0c;分別計算矩形柱面體積和圓形柱面體積。 代碼如下&#xff1a; import java.util.*;//導入掃描儀&#xff1b; public class clown {publi…

[原]Asp.net替換不同版本的Dll文件碰到的問題以及解決辦法.

情景還原: 今天一個朋友說網站不能上傳圖片,我檢查后發現一直卡住在上傳頁面,一直滾動,是個Fckeditor控件2.6.3的. 經過google以后得到的結論是圖片上傳成功,但是沒有返回結果,在服務器上可以看到上傳的圖片. 說明是上傳控件有問題,程序不能返回結果. 再google以后發現有人已經…

疊筐

Problem Description 需要的時候&#xff0c;就把一個個大小差一圈的筐疊上去&#xff0c;使得從上往下看時&#xff0c;邊筐花色交錯。這個工作現在要讓計算機來完成&#xff0c;得看你的了。 Input 輸入是一個個的三元組&#xff0c;分別是&#xff0c;外筐尺寸n&#xff…

“Visual Studio.net已檢測到指定的Web服務器運行的不是Asp.net1.1版。您將無法運行Asp.net Web應用程序或服務”問題的解決方案...

解決方案一&#xff1a; 1.確定有安裝.net framework 1.1&#xff0c;可以查看目錄&#xff0c;c:\winnt\microsoft.net\framework重啟IIS&#xff0c;重啟計算機&#xff08;常規糾錯方法&#xff09; 2.如果你的Web服務器使用了固定IP&#xff1a;確定你的“Internet信息服務…

【桶】220.存在重復元素 III 【LeetCode】

220.存在重復元素 III 【LeetCode】 給你一個整數數組 nums 和兩個整數 k 和 t。請你判斷是否存在 兩個不同下標i和j&#xff0c;使得 abs(nums[i] - nums[j]) < t&#xff0c;同時又滿足 abs(i - j) < k。 如果存在則返回 true&#xff0c;不存在返回 false。 示例 1…

遠控免殺專題12--Green-Hat-Suite免殺

0x01 免殺能力一覽表 幾點說明&#xff1a; 1、上表中標識 √ 說明相應殺毒軟件未檢測出病毒&#xff0c;也就是代表了Bypass。 2、為了更好的對比效果&#xff0c;大部分測試payload均使用msf的windows/meterperter/reverse_tcp模塊生成。 3、由于本機測試時只是安裝了360全…

英語基礎語法(八)-時態

英語中&#xff0c;動詞時態的用法是尤其復雜和富于變化的。經常通過動詞詞尾、組動詞等的變化表明動作發生時間的先后順序&#xff0c;即時態。總的來說&#xff0c;英語中的動詞時態分為 三個基本類型&#xff1a; 現在、過去和將來。動詞時態的變化常常伴隨著相應的表示時間…

Java PushbackInputStream markSupported()方法與示例

PushbackInputStream類markSupported()方法 (PushbackInputStream Class markSupported() method) markSupported() method is available in java.io package. markSupported()方法在java.io包中可用。 markSupported() method is used to check whether this stream supports …

面型對象 (接口與類的區別)

public class Demo4_Interface {public static void main(String[] args) {某女星 clown new 某女星();clown.潛規則();clown.關系();} }/*親爹只有一個&#xff0c;是單繼承;干爹可以有很多個&#xff0c;是多實現;*/ interface 某干爹{public void 關系();public void 潛規…

遠控免殺專題 13----zirikatu免殺

0x01 免殺能力一覽表 幾點說明&#xff1a; 1、上表中標識 √ 說明相應殺毒軟件未檢測出病毒&#xff0c;也就是代表了Bypass。 2、為了更好的對比效果&#xff0c;大部分測試payload均使用msf的windows/meterperter/reverse_tcp模塊生成。 3、由于本機測試時只是安裝了360全…

UML 的九種模型圖

1. UML的模型圖 UML 的模型圖能夠將被建模的系統的某一個方面的某一部分以圖形的方式表示出來&#xff0c;不同的視圖通過將多個不同的模型圖有機組合在一起就能夠描述系統模型的某方面的特征。UML的模型圖是有模型元素構成的&#xff0c;模型元素以圖標的形式直觀形象的表達…

【莫隊】區間眾數(Codeforces Round #716 (Div. 2) D)

D. Cut and Stick &#xff08;賽后補題&#xff09;借本題學習莫隊算法以及區間眾數的求法 題意&#xff1a;對于整型數組&#xff0c;每次詢問[L,R][L,R][L,R]區間問最少分為多少個子序列&#xff0c;使得每個子序列的眾數xxx的個數cntxcnt_xcntx?不大于 ?len2?\left \l…

如何正確使用SqlConnection

以前曾見過有人這樣寫代碼&#xff1a; public class Service1 : IService1{private SqlConnection conn new SqlConnection();public void Method1(){//do something with conn;}public void Method2(){//do something with conn;}public void Method3(){//do something with…

關系代數基本運算_關系代數的基本和附加運算

關系代數基本運算Definition 定義 Every DBMS must define a query language to enable users to access the data which is stored in the database. Relational Algebra is a procedural query language. It is used to query the database tables in order to access data…

遠控免殺專題 14 ---AVIator

0x01 免殺能力一覽表 幾點說明&#xff1a; 1、上表中標識 √ 說明相應殺毒軟件未檢測出病毒&#xff0c;也就是代表了Bypass。 2、為了更好的對比效果&#xff0c;大部分測試payload均使用msf的windows/meterperter/reverse_tcp模塊生成。 3、由于本機測試時只是安裝了360全…

面型對象 (包package)

面向對象(package關鍵字的概述及作用) 為什么要有包 將字節碼(.class)進行分類存放 包其實就是文件夾 代碼如下&#xff1a; package beyond.hjj;//在當前運行目錄下創建一個子目錄結構beyond\hjj&#xff0c;在子目錄下存放已經編譯成字節碼文件的clown.class類。 class c…

【Web開發】級聯查詢(Ajax/ jQuery/ Servlet)

實現級聯查詢 共有兩個下拉框&#xff0c;第一級為學院&#xff0c;第二級為學院開設的科目。 實現的功能為&#xff1a;當改變學院的選擇&#xff0c;第二級下拉框需變為對應學院開設的科目內容。 結果預覽&#xff1a; jsp頁面 <% page contentType"text/html;…

asp.net treeView綁定

這個東西不是什么復雜的東西&#xff0c; 幫著小兄弟寫個Demo, 實現個Binding public partial class _Default : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Bind(); } } priv…

關于TOmcat的一些小小的知識

web.xml中的url-pattern和form 表單中的action是相同的。form 表單中的action聲明的并不是servlet的名字 例&#xff1a; <servlet> <servlet-name>welcome</servlet-name> <servlet-class>WelcomeYou</servlet-class> </servlet> <ser…

Java文件類字符串getAbsolutePath()方法(帶示例)

文件類字符串getAbsolutePath() (File Class String getAbsolutePath()) This method is available in package java.io.File.getAbsolutePath(). 軟件包java.io.File.getAbsolutePath()中提供了此方法。 This method is used to return the absolute path of the file object …