欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

5)strlen計算字符串的具體長度(只能是字符串),不包括字符串結束符。返回的是字符個數(shù)。sizeof計算聲明后所占的內存數(shù)(字節(jié)大?。皇菍嶋H長度。

舉例:
1)char* ss = "0123456789";
sizeof(ss)為4,ss是指向字符串常量的字符指針,sizeof 獲得的是指針所占的空間,則為4
sizeof(*ss)為1,*ss是第一個char字符,則為1

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

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

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

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

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

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

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

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

參考資料:

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

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

各函數(shù)用法

一、strlen

頭文件

string.h

語法形式:

size_t strlen( const char* str);

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

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

函數(shù)定義

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

返回值

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

注意事項

char型數(shù)組未初始化的情況下,用strlen是不可行的,因為strlen的唯一標準是找‘\0’,記住這個就能明確strlen會執(zhí)行處什么值,如下:

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

結果無固定值,因為strlen判斷的唯一標準是’\0’,它會根據(jù)a和b的指針看是一直向后找,知道碰到’\0’,無論是不是自己字符串的結束標志’\0’

二、length/size

頭文件

兩者在c++中在iostream庫

函數(shù)原型

在c++標準庫中,兩者的定義如下:

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);
}

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

語法形式

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

三、sizeof

頭文件

不需要包含頭文件

函數(shù)定義

在 C 語言中,sizeof() 是一個判斷數(shù)據(jù)類型或者表達式長度的運算符,對sizeof() 的處理是在編譯階段進行

語法形式

sizeof有兩種語法形式,如下:

sizeof(type_name);//sizeof(類型);
sizeof object;//sizeof對象;

所以可以這樣表示:

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

sizeof計算對象的大小也是轉換成對對象類型的計算,也就是說,同種類型的不同對象其sizeof值都是一致的。sizeof對一個表達式求值,編譯器根據(jù)表達式的最終結果類型來確定大小,一般不會對表達式進行計算,如:

sizeof(2);//2的類型為int,所以等價于sizeof(int);
sizeof(2+3.14);//3.14的類型為double,2也會被提升成double類型,所以等價于sizeof(double);

sizeof也可以對一個函數(shù)調用求值,其結果是函數(shù)返回類型的大小,函數(shù)并不會被調用,我們來看一個完整的例子:

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

指針變量的sizeof

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

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

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

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

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

區(qū)別

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

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

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

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

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

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

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

3、大部分編譯程序 在編譯的時候就把sizeof計算過了 是類型或是變量的長度。

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

4、strlen的結果要在運行的時候才能計算出來,用來計算字符串的長度,不是類型占內存的大小

5、sizeof后如果是類型必須加括弧,如果是變量名可以不加括弧。這是因為sizeof是個操作符不是個函數(shù)

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

c++中的size()和length()沒有區(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;
}

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

在這里插入圖片描述

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

相關文章

  • c++中std::hash以及萬能hash的使用方式

    c++中std::hash以及萬能hash的使用方式

    這篇文章主要介紹了c++中std::hash以及萬能hash的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C與C++中結構體的區(qū)別

    C與C++中結構體的區(qū)別

    C中的結構體只涉及到數(shù)據(jù)結構,而不涉及到算法,也就是說在C中數(shù)據(jù)結構和算法是分離的,而到C++中一類或者一個結構體可以包含函數(shù)(這個函數(shù)在C++我們通常中稱為成員函數(shù)),C++中的結構體和類體現(xiàn)了數(shù)據(jù)結構和算法的結合
    2013-10-10
  • C++新特性詳細分析基于范圍的for循環(huán)

    C++新特性詳細分析基于范圍的for循環(huán)

    C++11這次的更新帶來了令很多C++程序員期待已久的for?range循環(huán),每次看到javascript,?lua里的for?range,心想要是C++能有多好,心里別提多酸了。這次C++11不負眾望,再也不用羨慕別家人的for?range了。下面看下C++11的for循環(huán)的新用法
    2022-04-04
  • 詳解如何將c語言文件打包成exe可執(zhí)行程序

    詳解如何將c語言文件打包成exe可執(zhí)行程序

    這篇文章主要介紹了詳解如何將c語言文件打包成exe可執(zhí)行程序,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • C++小利器之std::bind參數(shù)綁定包裝器的使用詳解

    C++小利器之std::bind參數(shù)綁定包裝器的使用詳解

    從 C++11 開始,標準庫提供了 std::bind 用于綁定函數(shù) f 和調用參數(shù),返回一個新可調用函數(shù)對象 fn,下面就跟隨小編一起深入了解一下std::bind的具體使用吧
    2023-12-12
  • C語言中使用快速排序算法對元素排序的實例詳解

    C語言中使用快速排序算法對元素排序的實例詳解

    這篇文章主要介紹了C語言中使用快速排序算法對元素排序的實例詳解,文中細分了幾個情況來舉例,在注釋里有說明,需要的朋友可以參考下
    2016-04-04
  • C++實現(xiàn)LeetCode(64.最小路徑和)

    C++實現(xiàn)LeetCode(64.最小路徑和)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(64.最小路徑和),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • 一起來了解c語言的str函數(shù)

    一起來了解c語言的str函數(shù)

    這篇文章主要為大家詳細介紹了c語言的str函數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++17實現(xiàn)flyweight_factory模板類及使用示例詳解

    C++17實現(xiàn)flyweight_factory模板類及使用示例詳解

    這篇文章主要為大家介紹了C++17實現(xiàn)flyweight_factory模板類及使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • C語言實現(xiàn)簡易五子棋小游戲

    C語言實現(xiàn)簡易五子棋小游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單五子棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05

最新評論