C語言中的strlen()和sizeof()對比分析
C語言中的strlen()和sizeof()對比
在C語言中,沒有字符串這種變量類型,一般用兩種方法實(shí)現(xiàn)。
一是用雙引號生成常量字符串再賦值給一個指針,指針指向的是該常量字符串的首字符地址;
二是利用字符數(shù)組,把字符存儲在數(shù)組中。值得注意的是,利用字符數(shù)組創(chuàng)建字符串的時候記得把’\0’存進(jìn)去(‘\0’本身是一個字符,占一個字節(jié)),因為很多對字符進(jìn)行操作的庫函數(shù)或多或少都跟’\0’有關(guān)系,或者說’\0’是字符串結(jié)束的官方標(biāo)志。
字符串 char arr[]={'a','a','a','a','a','a'} char *str = "aaaaaa"
定義:
**1. strlen函數(shù):**計算的是字符串str的長度,從字符的首地址開始遍歷,以 ‘\0’ 為結(jié)束標(biāo)志,然后將計算的長度返回,計算的長度并不包含’\0’。
當(dāng)我們遇到“\0"時我們就要停止讀取,此時“\0"前字符的個數(shù)就是字符串的長度,注意:這里的“\0"只是結(jié)束標(biāo)志,僅僅告訴我們strlen函數(shù)讀取到這里就要停止了,“\0"不算做一個字符?。?!
**2. sizeof函數(shù):**相比strlen函數(shù),sizeof就簡單多了,sizeof其實(shí)就是一個運(yùn)算符,主要用來計算所占空間字節(jié)的大小。
指針字節(jié):
指針 16位 2個字節(jié)
指針 32位 4個字節(jié)
指針 64位 8個字節(jié)
32位系統(tǒng):
char 1個字節(jié)
short 2個字節(jié)
int 2個字節(jié)
long 4個字節(jié)
char* 4個字節(jié)
int* 4個字節(jié)
int** 4個字節(jié)
64位系統(tǒng):
char 1個字節(jié)
short 2個字節(jié)
int 4個字節(jié)(x 2)
long 8個字節(jié)(x 2)
char* 4個字節(jié)
int* 4個字節(jié)
int** 4個字節(jié)
- 字符串常量放在靜態(tài)存儲區(qū),為只讀,不能再通過指針修改,例如chr *p=“xiaolong”
- strlen遇到\0結(jié)束,長度不包括\0
- sizeof計算占用多少字節(jié)時,\0也包含在內(nèi)
1. strlen()
int main () { char *str="xiaolong"; printf("%d\n",strlen(str)); return 0; } 輸出:8
#include <stdio.h> #include <string.h> int main () { char str[]="xiaolong"; printf("%d\n",strlen(str)); return 0; } 輸出:8
#include <string.h> int main () { char str[10]="xiaolong"; printf("%d\n",strlen(str)); return 0; } 雖然數(shù)組大小是10,但是編譯器自動在xiaolong后面添加了\0 ,因此長度不是10而是8 輸出:8
2. sizeof()
#include <stdio.h> #include <string.h> int main () { char str[10]="xiaolong"; printf("%d\n",sizeof(str)); return 0; } 指定大小為n的char數(shù)組無論如何都是占用n個字節(jié),例如此處10字節(jié) 輸出:10
#include <stdio.h> #include <string.h> int main () { char *str="xiaolong"; printf("%d\n",sizeof(str)); return 0; } 由于是指針,32位機(jī)器指針占4個字節(jié) 輸出:4
#include <stdio.h> #include <string.h> int main () { char str[]="xiaolong"; printf("%d\n",sizeof(str)); return 0; } 結(jié)果不是8而是9,因為默認(rèn)在后面添加了一個\0, \0也算一個字節(jié) 輸出:9
1.size_t 的定義
size_t是一種機(jī)器相關(guān)的無符號類型,它被設(shè)計的足夠大以便能表示內(nèi)存中任意對象的大小。
在C語言中頭文件為stddef.h,在C++語言中頭文件為cstddef。
size_t 是sizeof的返回類型,在64位中是unsigned long int,在32位中是unsigned int。
2.使用
size_t類型通常用于循環(huán)、數(shù)組索引、大小的存儲和地址運(yùn)算。數(shù)組的下標(biāo)通常定義為size_t類型。size_t可以跨平臺,并且具有高代碼的可移植性、有效性或者可讀性。
參考資料:https://blog.csdn.net/shenlong1356/article/details/106321092/
到此這篇關(guān)于C語言中的strlen()和sizeof()對比的文章就介紹到這了,更多相關(guān)C語言 strlen()和sizeof()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C語言sizeof和strlen區(qū)別小結(jié)
- C語言中sizeof和strlen的區(qū)別詳解
- C語言之sizeof與strlen的使用及區(qū)別
- 淺談C語言中的sizeof()和strlen()的區(qū)別
- 關(guān)于C語言strlen與sizeof區(qū)別詳情
- C語言入門篇--sizeof與strlen基礎(chǔ)理論
- C語言中sizeof()與strlen()的區(qū)別詳解
- C語言中sizeof()與strlen()函數(shù)的使用入門及對比
- C語言中關(guān)于sizeof 和 strlen的區(qū)別分析
- C語言中sizeof 和 strlen的區(qū)別
相關(guān)文章
C/C++產(chǎn)生隨機(jī)數(shù)函數(shù)簡單介紹
這篇文章主要為大家詳細(xì)介紹了C/C++產(chǎn)生隨機(jī)數(shù)函數(shù)的實(shí)現(xiàn)方法,如何使用C/C++產(chǎn)生隨機(jī)數(shù)函數(shù),感興趣的小伙伴們可以參考一下2016-04-04Java?C++?算法題解leetcode145商品折扣后最終價格單調(diào)棧
這篇文章主要介紹了Java?C++?算法題解leetcode145商品折扣后最終價格單調(diào)棧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09