我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++中获取字符串长度的函数sizeof()、strlen()、length()、size()详解和区别(推荐)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++中获取字符串长度的函数sizeof()、strlen()、length()、size()详解和区别(推荐)

在C++中计算长度的函数有四种,它们分别是sizeof() ,size(),strlen(),str.length()

一.sizeof()和strlen()两者区别:

1)sizeof操作符的结果类型是size_t,该类型保证能容纳实现所建立的最大对象的字节大小。 
2)sizeof是运算符,strlen是函数。 
3)sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。 
4)sizeof在编译时期就计算出来,strlen在运行之后才能计算出来。

5)strlen计算字符串的具体长度(只能是字符串),不包括字符串结束符。返回的是字符个数。sizeof计算声明后所占的内存数(字节大小),不是实际长度。

举例:
1)char* ss = "0123456789";
sizeof(ss)为4,ss是指向字符串常量的字符指针,sizeof 获得的是指针所占的空间,则为4
sizeof(*ss)为1,*ss是第一个char字符,则为1

2)char ss[] = "0123456789";
sizeof(ss)为11,ss是数组,计算到'\0'位置,因此是(10+1)
sizeof(*ss)为1,*ss是第一个字符

3)char ss[100] = "0123456789";
sizeof(ss)为100,ss表示在内存中预分配的大小,100*1
strlen(ss)为10,它的内部实现用一个循环计算字符串的长度,直到'\0'为止。

4)int ss[100] = "0123456789";
sizeof(ss)为400,ss表示在内存中预分配的大小,100*4
strlen(ss)错误,strlen参数只能是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()函数与length()函数作用相同。 
例如:string str = “wang” 
则,str.length() = 4。

除此之外,size()函数还可以获取vector类型的长度。 
例如:vector < int> num(15,2) 
则,num.size() = 15。

参考资料:

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

补充:strlen、length、size、sizeof的用法与区别

各函数用法

一、strlen

头文件

string.h

语法形式:

size_t strlen( const char* str);

该函数的默认使用类型是char * 也就是一个char指针类型,所以在判断过程中是根据指针往后找,对于 char p[]或者char *p是可以直接使用的

但是对于直接的string类型,例如:string a=“abc” 这种需要需要用c_str()将C++ string转换为char*类型: strlen(a.c_str());

函数定义

strlen所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值(长度不包含’\0’)

返回值

给定字符串(不包括“\0”)长度

注意事项

char型数组未初始化的情况下,用strlen是不可行的,因为strlen的唯一标准是找‘\0’,记住这个就能明确strlen会执行处什么值,如下:

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

结果无固定值,因为strlen判断的唯一标准是’\0’,它会根据a和b的指针看是一直向后找,知道碰到’\0’,无论是不是自己字符串的结束标志’\0’

二、length/size

头文件

两者在c++中在iostream库

函数原型

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

所以两者没有区别

语法形式

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

三、sizeof

头文件

不需要包含头文件

函数定义

在 C 语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符,对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对一个表达式求值,编译器根据表达式的最终结果类型来确定大小,一般不会对表达式进行计算,如:

sizeof(2);//2的类型为int,所以等价于sizeof(int);
sizeof(2+3.14);//3.14的类型为double,2也会被提升成double类型,所以等价于sizeof(double);

sizeof也可以对一个函数调用求值,其结果是函数返回类型的大小,函数并不会被调用,我们来看一个完整的例子:

char foo()
{
	return 'a';
}
int main()
{
	size_t 	a=sizeof(foo());
	//foo()的返回值类型为char,所以sz=sizeof(char),foo()并不会被调用
}

指针变量的sizeof

指针记录了另一个对象的地址。在32位计算机中,一个指针变量的返回值通常是4(注意结果是以字节为单位),在64位系统中指针变量的sizeof通常为8

通常情况下,sizeof对同一个字符数组求大小可能会存在两种可能

str是字符数组且初始化
char str[] = "hello"
str由字符串"hello"初始化,“hello”; 共5个字符,字符串以 ‘\0’ 结尾。所以str数组的长度是6

str是字符数组且未初始化
int a2[3]; sizeof( a1 );
结果为3*4=12(依赖于int)

str为指针形式
char * str; sizeof(str)
sizeof(str)为4  X86平台
sizeof(str)为8  X64平台

区别

一、sizeof()、strlen()两者区别:

1、sizeof():返回所占总空间的字节数
(1)针对整型或字符型数组
(2)针对整型或字符型指针

2、strlen():返回字符数组或字符串所占的字节数
(1)针对字符数组
(2)针对字符指针

  • sizeof(…)是运算符,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小
  • strlen(…)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符’\0’。返回的长度大小不包括’\0’
  • strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个’\0’,如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到’\0’停止。

二、sizeof()、strlen()两者区别:

1、sizeof是运算符,strlen是函数

2、sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以’’\0’'结尾的

3、大部分编译程序 在编译的时候就把sizeof计算过了 是类型或是变量的长度。

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

4、strlen的结果要在运行的时候才能计算出来,用来计算字符串的长度,不是类型占内存的大小

5、sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数

三、length()和size()两者区别:

c++中的size()和length()没有区别

展示

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

若空着则表示无法用该函数求出长度

在这里插入图片描述

到此这篇关于C++中获取字符串长度的函数sizeof()、strlen()、length()、size()详解和区别的文章就介绍到这了,更多相关获取字符串长度的函数sizeof()、strlen()、length()、size()内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++中获取字符串长度的函数sizeof()、strlen()、length()、size()详解和区别(推荐)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++中获取字符串长度的函数sizeof()、strlen()、length()、size()详解和区别(推荐)

在C++中计算长度的函数有四种,它们分别是sizeof() ,size(),strlen(),str.length(),这篇文章主要介绍了C++中获取字符串长度的函数sizeof()、strlen()、length()、size()详解和区别,需要的朋友可以参考下
2023-02-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录