sizeof/strlen—字符數組/字符串的長度你真的懂嗎?附代碼

2020-12-06 科技研究員猴哥

高級程式語言的軟體開發過程對於內存的使用雖然不需要程式設計師做過度的檢查,但掌握各種數據類型的長度對任何程式設計師的編程開發都是至關重要的。

數據類型的長度

本文將對各種數據類型的變量長度做詳細介紹,以供大家參考、學習。

求基本數據變量類型的長度—sizeof

基本數據類型的長度:

布爾:bool字符:char整數:short、int、long、long long浮點數:float、double一個問題:除bool以外的上述各變量指針所佔字節數是多少呢?代碼與結果:

基本數據變量字節長度代碼
結果

重點:字符數組與字符串所佔的字節長度

這是一個很容易混淆的點,字符串與字符數組,sizeof與strlen,直接看代碼:

字符數組、字符串的長度

說明:

sizeof運算符指出的是整個數組的長度:15位元組strlen返回的是存儲在數組中的字符串的長度,而非數組本身長度strlen只計算可見字符,而不會包含結束字符『\0』存儲字符串到字符數組中要求數組長度至少為字符串長度strlen+1字符串以『\0』為結束標誌按照上述規則,代碼結果就很容易理解了:

運行結果

有趣現象的解釋:

字符列印時被'\0'結束

總結

防止越界訪問最關鍵的就是熟知變量、數組的大小,熟練的掌握所有變量類型所佔的字節數對於任何程式設計師來說都是有百利而無一害的。

相關焦點

  • strlen與sizeof的區別
    sizeof操作符的結果類型是size_t,它在頭文件中typedef為unsigned int類型。該類型保證能容納實現所建立的最大對象的字節大小。2.sizeof是算符,strlen是函數。3.sizeof可以用類型做參數,本文引用地址:http://www.eepw.com.cn/article/201611/322230.htm4.數組做5.大部分編譯程序在編譯的時候就把charstr[20]="0123456789";//str是編譯期大小已經固定的數組inta=strlen(str);
  • C++如何理解字符串長度函數strlen
    1、字符串長度函數的原型為size_t strlen(const char *str); 其中size_t實際上是unsigned int,其是用typedef 定義的unsigned int一個別名size_t,代碼如下typedef unsigned int size_t;
  • 快速上手系列-C語言之字符串處理函數(一)
    C語言中常用的字符串操作函數,有比如計算字符串長度、字符串拷貝,字符串比較等這樣的整體操作函數,有字符串查詢函數,也有字符串轉換函數等等,這裡先介紹字符串整體操作函數。字符串整體操作函數實際編程中,經常遇到對字符串整體的控制等操作,比如長度測量函數strlen(),字符串拷貝函數strcpy()/strncpy(),字符串比較函數 strcmp()/strncmp(),字符串連接函數strcat()/strncat()等,這些函數是非常有用的。
  • C語言編程技巧:跟我學如何定義及使用一個字符串數組
    實現目的我們在用C語言編寫程序時,經常會遇到使用字符串數組的情況,這種數組的特點是, 數組中的每個元素都是一個字符串,但每個字符串的長度卻不相同。如果你使用C++語言進行編程的話,實現起來相對比較簡單,只需直接選擇標準模板庫的字符串string類,在代碼中定義該類的一個數組即可實現。現在的問題是,在純C語言中如何定義這樣的一個字符串數組呢?如對於下面的一個字符串數組:str = {「I love C.」,「I love C++.」,「I love JAVA.」
  • 定義只有一個數組成員的C語言結構體有什麼用?
    在C語言程序開發中,有經驗的程式設計師有時會定義只有一個數組成員的結構體,雖然語法簡單,但是卻常常讓初學者感到迷惑:這麼做有什麼好處嗎?struct ABC {unsigned long array[MAX];} abc;
  • 你真的了解JS中的數組嗎?——數組API的總結
    數組的增刪改查增arr.push(a,b):在數組arr的最後面增加元素a,b,返回變化後的數組長度根據定義,可以自己寫一個push方法arr.unshift(a,b) 在數組arr的首位依次增加a,b
  • 真的了解字符串拼接嗎?用Python拼接字符串的常用方法及性能分析
    本篇不會全部進行匯總,旨在通過幾種常用的方法在不同條件下性能進行對比,為大家提供一種字符串使用的指導意見。大家選擇自己熟悉的掌握並使用即可,不需要全部進行記憶(留下大腦空間記點別的東西……)。常見的字符串拼接方式「+」操作符拼接「+」操作符連接字符串是Python中比較經典的字符串拼接方式。可以使用「+」將兩個字符串直接進行拼接。
  • pandas向量化字符串操作方法!
    作者:小伍哥 來源:AI入門學習python內置一系列強大的字符串處理方法,但這些方法只能處理單個字符串,處理一個序列的字符串時,需要用到循環。那麼,有沒有辦法,不用循環就能同時處理多個字符串呢,pandas的向量化操作就提供了這樣的方法。
  • 在C語言中如何高效地複製和連接字符串?
    這兩組函數都將字符從一個對象複製到另一個對象,並且都返回它們的第一個參數:指向目標對象的起始指針。這種返回值的方式是導致函數效率低下的一個原因,而這正是本文要探討的主題。本文中展示的示例代碼僅僅用於說明目的。它們可能包含細微的錯誤,不應該被視為最佳代碼實踐。
  • 單片機的C語言中數組的用法
    for(i=0;i<10;i++){parray[i]=i; //向數組中賦值}free(parray); //釋放數組while(1);}字符串是數組的一個重要特例。它的每個單元的數據均為字符類型(char),最後一個單元為 (0x00),用來表示字符串的結束。
  • 你需要立刻學會的20個Python代碼段
    在必要時刻,這些小訣竅能夠減少你上網查Stack Overflow的麻煩。而且它們會在每日編程練習中助你一臂之力。1. 反轉字符串以下代碼使用Python切片操作來反轉字符串。使用標題類(首字母大寫)以下代碼可用於將字符串轉換為標題類。這是通過使用字符串類中的title()方法來完成。
  • Python編程數組怎麼創建?4張圖講盡Numpy包所有數組創建函數
    在Python編程和學習中,特別是在科學計算中,不可避免地要創建大量數組。為了將文本中的數據讀取數組中,你還在編寫讀取程序嗎?Numpy中數組創建函數一條命令就能幫你解決。Python語言本身沒有數組這種類型,Numpy包幾乎是為Python數組量身定做的,也是Python中經典包之一。Numpy包集成了大量的函數用來創建各種數組,功能很強大,而我們往往忽略了這些函數。由於我們不知道Numpy的函數有哪些功能,而使用額外的代碼來實現,浪費了時間和精力。
  • 在JavaScript中,使用replace()、test()和exec()方法匹配字符串
    返回的結果就是替換後的新字符串。現在將JS代碼運行一下結果:圖1從圖1的運行結果上看,已經將Hello Microsoft替換為Hello Google字符串。在Replace()方法中,使用了正則表達式,則只要能在正則表達式上匹配到,則就會發生替換。
  • 在VBA中如何使用動態數組,以及利用動態數組去除重複值的方法
    一 :Filter函數:這個函數返回一個下標從零開始的數組,該數組包含基於指定篩選條件的一個字符串數組的子集,語法如下:Filter(sourcesrray, match[, include[, compare]])參數a) sourcesrray是必須的,要執行搜索的一維字符串數組。b) match是必須的,要搜索的字符串。
  • PHP判斷數組為空的具體方式
    PHP判斷數組為空的具體方式 我們可以通過for循環、implode()、count()、in_array('', $arr))、用strlen()等方式來進行PHP判斷數組為空的實現。
  • 10個很棒的 JavaScript 字符串技巧
    我們稱一個字符序列為字符串。這幾乎是所有程式語言中都有的基本類型之一。這裡跟大家展示關於 JS 字符串的10個很棒的技巧,你可能還不知道哦?1.如何多次複製一個字符串JS 字符串允許簡單的重複,與純手工複製字符串不同,我們可以使用字符串的repeat方法。2. 如何填充一個字符串到指定的長度有時,我們希望字符串具有特定長度。
  • 數組的基2分裂法
    同理,數組C(x)也可進行相同的抽取,當所有的步驟完成時,得到的新的數組D(x)={x0,x8,x4,x12,x2,x10,x6,x14,x1,x9,x5,x13,x3,x11,x7,x15};錯略一看,如果編寫程序,用迭代的方法最為合適,但是笨蛋熊在程序編寫過程中,遇到了不少的問題,首先是元數組抽取一次後分裂為2個數組,新的2個數組再次抽取後得到4個數組,一直往下分裂,直至最終的數組長度為2時停止