亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++中獲取字符串長(zhǎng)度的函數(shù)sizeof()、strlen()、length()、size()詳解和區(qū)別(推薦)

 更新時(shí)間:2023年02月04日 14:36:40   作者:理想照耀心靈丶  
在C++中計(jì)算長(zhǎng)度的函數(shù)有四種,它們分別是sizeof()?,size(),strlen(),str.length(),這篇文章主要介紹了C++中獲取字符串長(zhǎng)度的函數(shù)sizeof()、strlen()、length()、size()詳解和區(qū)別,需要的朋友可以參考下

在C++中計(jì)算長(zhǎng)度的函數(shù)有四種,它們分別是sizeof() ,size(),strlen(),str.length()。

一.sizeof()和strlen()兩者區(qū)別:

1)sizeof操作符的結(jié)果類(lèi)型是size_t,該類(lèi)型保證能容納實(shí)現(xiàn)所建立的最大對(duì)象的字節(jié)大小。 
2)sizeof是運(yùn)算符,strlen是函數(shù)。 
3)sizeof可以用類(lèi)型做參數(shù),strlen只能用char*做參數(shù),且必須是以''\0''結(jié)尾的。 
4)sizeof在編譯時(shí)期就計(jì)算出來(lái),strlen在運(yùn)行之后才能計(jì)算出來(lái)。

5)strlen計(jì)算字符串的具體長(zhǎng)度(只能是字符串),不包括字符串結(jié)束符。返回的是字符個(gè)數(shù)。sizeof計(jì)算聲明后所占的內(nèi)存數(shù)(字節(jié)大?。?,不是實(shí)際長(zhǎng)度。

舉例:
1)char* ss = "0123456789";
sizeof(ss)為4,ss是指向字符串常量的字符指針,sizeof 獲得的是指針?biāo)嫉目臻g,則為4
sizeof(*ss)為1,*ss是第一個(gè)char字符,則為1

2)char ss[] = "0123456789";
sizeof(ss)為11,ss是數(shù)組,計(jì)算到'\0'位置,因此是(10+1)
sizeof(*ss)為1,*ss是第一個(gè)字符

3)char ss[100] = "0123456789";
sizeof(ss)為100,ss表示在內(nèi)存中預(yù)分配的大小,100*1
strlen(ss)為10,它的內(nèi)部實(shí)現(xiàn)用一個(gè)循環(huán)計(jì)算字符串的長(zhǎng)度,直到'\0'為止。

4)int ss[100] = "0123456789";
sizeof(ss)為400,ss表示在內(nèi)存中預(yù)分配的大小,100*4
strlen(ss)錯(cuò)誤,strlen參數(shù)只能是char*,且必須是以'\0'結(jié)尾

5)char[] a={'a','b','c'};
sizeof(a)的值應(yīng)該為3。
char[] b={"abc"};
sizeof(b)的值應(yīng)該是4。

6)若string str={'a','b','c','\0','X'};
那么sizeof(str)為5,strlen(str)為3。

二.string中的length()和size()

c++中,在獲取字符串長(zhǎng)度時(shí),size()函數(shù)與length()函數(shù)作用相同。 
例如:string str = “wang” 
則,str.length() = 4。

除此之外,size()函數(shù)還可以獲取vector類(lèi)型的長(zhǎng)度。 
例如:vector < int> num(15,2) 
則,num.size() = 15。

參考資料:

https://blog.csdn.net/z_qifa/article/details/77744482

補(bǔ)充:strlen、length、size、sizeof的用法與區(qū)別

各函數(shù)用法

一、strlen

頭文件

string.h

語(yǔ)法形式:

size_t strlen( const char* str);

該函數(shù)的默認(rèn)使用類(lèi)型是char * 也就是一個(gè)char指針類(lèi)型,所以在判斷過(guò)程中是根據(jù)指針往后找,對(duì)于 char p[]或者char *p是可以直接使用的

但是對(duì)于直接的string類(lèi)型,例如:string a=“abc” 這種需要需要用c_str()將C++ string轉(zhuǎn)換為char*類(lèi)型: strlen(a.c_str());

函數(shù)定義

strlen所作的是一個(gè)計(jì)數(shù)器的工作,它從內(nèi)存的某個(gè)位置(可以是字符串開(kāi)頭,中間某個(gè)位置,甚至是某個(gè)不確定的內(nèi)存區(qū)域)開(kāi)始掃描,直到碰到第一個(gè)字符串結(jié)束符’\0’為止,然后返回計(jì)數(shù)器值(長(zhǎng)度不包含’\0’)

返回值

給定字符串(不包括“\0”)長(zhǎng)度

注意事項(xiàng)

char型數(shù)組未初始化的情況下,用strlen是不可行的,因?yàn)閟trlen的唯一標(biāo)準(zhǔn)是找‘\0’,記住這個(gè)就能明確strlen會(huì)執(zhí)行處什么值,如下:

char *a; 	 
	char b[5]; 	
	strlen(a) 
	strlen(b)

結(jié)果無(wú)固定值,因?yàn)閟trlen判斷的唯一標(biāo)準(zhǔn)是’\0’,它會(huì)根據(jù)a和b的指針看是一直向后找,知道碰到’\0’,無(wú)論是不是自己字符串的結(jié)束標(biāo)志’\0’

二、length/size

頭文件

兩者在c++中在iostream庫(kù)

函數(shù)原型

在c++標(biāo)準(zhǔn)庫(kù)中,兩者的定義如下:

size_type __CLR_OR_THIS_CALL length() const
{
//return length of sequence
return (_Mysize );
}
size_type __CLR_OR_THIS_CALL size() const
{
// return length of sequence
return (_Mysize);
}

所以兩者沒(méi)有區(qū)別

語(yǔ)法形式

string a;
	a.length();
	a.size();

三、sizeof

頭文件

不需要包含頭文件

函數(shù)定義

在 C 語(yǔ)言中,sizeof() 是一個(gè)判斷數(shù)據(jù)類(lèi)型或者表達(dá)式長(zhǎng)度的運(yùn)算符,對(duì)sizeof() 的處理是在編譯階段進(jìn)行

語(yǔ)法形式

sizeof有兩種語(yǔ)法形式,如下:

sizeof(type_name);//sizeof(類(lèi)型);
sizeof object;//sizeof對(duì)象;

所以可以這樣表示:

int i;
sizeof(i);//ok
sizeof i;//ok
sizeof(int);//ok
sizeof int;//erro

sizeof計(jì)算對(duì)象的大小也是轉(zhuǎn)換成對(duì)對(duì)象類(lèi)型的計(jì)算,也就是說(shuō),同種類(lèi)型的不同對(duì)象其sizeof值都是一致的。sizeof對(duì)一個(gè)表達(dá)式求值,編譯器根據(jù)表達(dá)式的最終結(jié)果類(lèi)型來(lái)確定大小,一般不會(huì)對(duì)表達(dá)式進(jìn)行計(jì)算,如:

sizeof(2);//2的類(lèi)型為int,所以等價(jià)于sizeof(int);
sizeof(2+3.14);//3.14的類(lèi)型為double,2也會(huì)被提升成double類(lèi)型,所以等價(jià)于sizeof(double);

sizeof也可以對(duì)一個(gè)函數(shù)調(diào)用求值,其結(jié)果是函數(shù)返回類(lèi)型的大小,函數(shù)并不會(huì)被調(diào)用,我們來(lái)看一個(gè)完整的例子:

char foo()
{
	return 'a';
}
int main()
{
	size_t 	a=sizeof(foo());
	//foo()的返回值類(lèi)型為char,所以sz=sizeof(char),foo()并不會(huì)被調(diào)用
}

指針變量的sizeof

指針記錄了另一個(gè)對(duì)象的地址。在32位計(jì)算機(jī)中,一個(gè)指針變量的返回值通常是4(注意結(jié)果是以字節(jié)為單位),在64位系統(tǒng)中指針變量的sizeof通常為8

通常情況下,sizeof對(duì)同一個(gè)字符數(shù)組求大小可能會(huì)存在兩種可能

str是字符數(shù)組且初始化
char str[] = "hello"
str由字符串"hello"初始化,“hello”; 共5個(gè)字符,字符串以 ‘\0’ 結(jié)尾。所以str數(shù)組的長(zhǎng)度是6

str是字符數(shù)組且未初始化
int a2[3]; sizeof( a1 );
結(jié)果為3*4=12(依賴于int)

str為指針形式
char * str; sizeof(str)
sizeof(str)為4  X86平臺(tái)
sizeof(str)為8  X64平臺(tái)

區(qū)別

一、sizeof()、strlen()兩者區(qū)別:

1、sizeof():返回所占總空間的字節(jié)數(shù)
(1)針對(duì)整型或字符型數(shù)組
(2)針對(duì)整型或字符型指針

2、strlen():返回字符數(shù)組或字符串所占的字節(jié)數(shù)
(1)針對(duì)字符數(shù)組
(2)針對(duì)字符指針

  • sizeof(…)是運(yùn)算符,其值在編譯時(shí)即計(jì)算好了,參數(shù)可以是數(shù)組、指針、類(lèi)型、對(duì)象、函數(shù)等。它的功能是:獲得保證能容納實(shí)現(xiàn)所建立的最大對(duì)象的字節(jié)大小。由于在編譯時(shí)計(jì)算,因此sizeof不能用來(lái)返回動(dòng)態(tài)分配的內(nèi)存空間的大小
  • strlen(…)是函數(shù),要在運(yùn)行時(shí)才能計(jì)算。參數(shù)必須是字符型指針(char*)。當(dāng)數(shù)組名作為參數(shù)傳入時(shí),實(shí)際上數(shù)組就退化成指針了。它的功能是:返回字符串的長(zhǎng)度。該字符串可能是自己定義的,也可能是內(nèi)存中隨機(jī)的,該函數(shù)實(shí)際完成的功能是從代表該字符串的第一個(gè)地址開(kāi)始遍歷,直到遇到結(jié)束符’\0’。返回的長(zhǎng)度大小不包括’\0’
  • strlen(char*)函數(shù)求的是字符串的實(shí)際長(zhǎng)度,它求得方法是從開(kāi)始到遇到第一個(gè)’\0’,如果你只定義沒(méi)有給它賦初值,這個(gè)結(jié)果是不定的,它會(huì)從aa首地址一直找下去,直到遇到’\0’停止。

二、sizeof()、strlen()兩者區(qū)別:

1、sizeof是運(yùn)算符,strlen是函數(shù)

2、sizeof可以用類(lèi)型做參數(shù),strlen只能用char*做參數(shù),且必須是以’’\0’'結(jié)尾的

3、大部分編譯程序 在編譯的時(shí)候就把sizeof計(jì)算過(guò)了 是類(lèi)型或是變量的長(zhǎng)度。

char str[20]="0123456789"; 
int a=strlen(str); //a=10; 
int b=sizeof(str); //而b=20; 

4、strlen的結(jié)果要在運(yùn)行的時(shí)候才能計(jì)算出來(lái),用來(lái)計(jì)算字符串的長(zhǎng)度,不是類(lèi)型占內(nèi)存的大小

5、sizeof后如果是類(lèi)型必須加括弧,如果是變量名可以不加括弧。這是因?yàn)閟izeof是個(gè)操作符不是個(gè)函數(shù)

三、length()和size()兩者區(qū)別:

c++中的size()和length()沒(méi)有區(qū)別

展示

#include<iostream>
#include<cstring>
using namespace std;
int main(){
	char str[] = "abcd";
	char *arr = "abcd";
	string a="abcd";
	cout<<"        str"<<"  a"<<"  arr"<<endl; 
	cout<<"strlen   "<<strlen(str)<<"   "<<strlen(a.c_str())<<"   "<<strlen(arr)<<endl;
	cout<<"length   "<<"    "<<a.length()<<endl; 
	cout<<"size     "<<"    "<<a.size()<<endl;
	cout<<"sizeof   "<<sizeof(str)<<"   "<<sizeof(a)<<"   "<<sizeof(arr)<<endl;
}

若空著則表示無(wú)法用該函數(shù)求出長(zhǎng)度

在這里插入圖片描述

到此這篇關(guān)于C++中獲取字符串長(zhǎng)度的函數(shù)sizeof()、strlen()、length()、size()詳解和區(qū)別的文章就介紹到這了,更多相關(guān)獲取字符串長(zhǎng)度的函數(shù)sizeof()、strlen()、length()、size()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中地圖按鍵排序?qū)崿F(xiàn)示例

    C++中地圖按鍵排序?qū)崿F(xiàn)示例

    這篇文章主要為大家介紹了C++中地圖按鍵排序?qū)崿F(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Qt利用QPainter實(shí)現(xiàn)基本繪圖的示例詳解

    Qt利用QPainter實(shí)現(xiàn)基本繪圖的示例詳解

    Qt?中提供了強(qiáng)大的?2D?繪圖系統(tǒng),可以使用相同的?API?在屏幕和繪圖設(shè)備上進(jìn)行繪制,它主要基于QPainter、QPaintDevice?和?QPaintEngine?這三個(gè)類(lèi)。本文主要和大家介紹一下QPainter實(shí)現(xiàn)的基本繪圖,感興趣的可以了解一下
    2022-12-12
  • C++中指針函數(shù)與函數(shù)指針的使用

    C++中指針函數(shù)與函數(shù)指針的使用

    今天小編就為大家分享一篇關(guān)于C++中指針函數(shù)與函數(shù)指針的使用,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • Opencv Hough算法實(shí)現(xiàn)圖片中直線檢測(cè)

    Opencv Hough算法實(shí)現(xiàn)圖片中直線檢測(cè)

    這篇文章主要為大家詳細(xì)介紹了Opencv Hough算法實(shí)現(xiàn)圖片中直線檢測(cè),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • C語(yǔ)言三子棋一步步實(shí)現(xiàn)詳程

    C語(yǔ)言三子棋一步步實(shí)現(xiàn)詳程

    三子棋是一種民間傳統(tǒng)游戲,又叫九宮棋、圈圈叉叉、一條龍、井字棋等。將正方形對(duì)角線連起來(lái),相對(duì)兩邊依次擺上三個(gè)雙方棋子,只要將自己的三個(gè)棋子走成一條線,對(duì)方就算輸了,想用c語(yǔ)言做出這個(gè)游戲,事實(shí)上也是比較簡(jiǎn)單的,下面通過(guò)c語(yǔ)言進(jìn)行對(duì)五子棋的分析
    2022-02-02
  • C++實(shí)現(xiàn)圖的鄰接矩陣存儲(chǔ)和廣度、深度優(yōu)先遍歷實(shí)例分析

    C++實(shí)現(xiàn)圖的鄰接矩陣存儲(chǔ)和廣度、深度優(yōu)先遍歷實(shí)例分析

    這篇文章主要介紹了C++實(shí)現(xiàn)圖的鄰接矩陣存儲(chǔ)和廣度、深度優(yōu)先遍歷,實(shí)例分析了C++實(shí)現(xiàn)圖的遍歷技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C語(yǔ)言實(shí)現(xiàn)常見(jiàn)進(jìn)制轉(zhuǎn)換的示例代碼

    C語(yǔ)言實(shí)現(xiàn)常見(jiàn)進(jìn)制轉(zhuǎn)換的示例代碼

    生活中最常見(jiàn)的進(jìn)制是十進(jìn)制,而有一類(lèi)編程題會(huì)要求將十進(jìn)制轉(zhuǎn)換為其他進(jìn)制,本文將主要講述C語(yǔ)言中常見(jiàn)的幾類(lèi)進(jìn)制轉(zhuǎn)換問(wèn)題,希望對(duì)大家有所幫助
    2023-04-04
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之單鏈表的查找和建立

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之單鏈表的查找和建立

    鏈表是一種物理存儲(chǔ)結(jié)構(gòu)上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過(guò)鏈表中的指針鏈接次序?qū)崿F(xiàn)的。本文將和大家一起聊聊C語(yǔ)言中單鏈表的查找和建立,感興趣的可以學(xué)習(xí)一下
    2022-09-09
  • C語(yǔ)言實(shí)現(xiàn)時(shí)區(qū)轉(zhuǎn)換函數(shù)的實(shí)例

    C語(yǔ)言實(shí)現(xiàn)時(shí)區(qū)轉(zhuǎn)換函數(shù)的實(shí)例

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)時(shí)區(qū)轉(zhuǎn)換函數(shù)的實(shí)例的相關(guān)資料,這里分析需求并提供實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2017-08-08
  • C語(yǔ)言數(shù)字圖像處理之直方圖均衡化

    C語(yǔ)言數(shù)字圖像處理之直方圖均衡化

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言數(shù)字圖像處理之直方圖均衡化,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評(píng)論