字符串的sizeof长度及strlen长度
在C/C++中,字符串是以零('\0')结尾的。比如,对于下面的字符串:
"hello"
在最后一个字符'd'后面,还有一个我们肉眼看不见的'\0'字符,作为该字符串的结束符。所以,"Hello"其在内存中的存储形式为:
'H' 'e' 'l' 'l' 'o' '\0'
最后有一个我们看不见的'\0'。明白了字符串的结尾方式,那么如何计算字符串的长度呢?比如:
例题1:
char str1[]="12345678";
char str2[]={'1','2','3','4','5','6','7','8'};
char str3[]={'1','2','3','\0','5','6','7','8'};
sizeof(str1)=?
sizeof(str2)=?
sizeof(str3)=?
strlen(str1)=?
strlen(str2)=?
strlen(str3)=?
分析:
str1是一个字符数组,由字符串"12345678"进行初始化。由于"12345678"含有一个结尾字符'\0',所以str1数组共有9个字符。 因此sizeof(str1)=9。
str2也是一个字符数组,它的长度由'1','2','3','4','5','6','7','8'8个字符初始化,并没有指明零字符。 因此sizeof(str2)=8。
str3同样由8个字符初始化,因此sizeof(str3)=8。
strlen函数只计算字符串中不含零的字符个数。因此:strlen(str1)=8。
而由于str2中最后一个字符不包含零,所以,str2不是一个有效的字符串, 因此strlen(str2)不确定。
而对于字符数组str3,在第4个字符为'\0',所以作为一个字符串,在此处结尾。所以strlen(str3)=3。
答案:
sizeof(str1)=9
sizeof(str2)=8
sizeof(str3)=8
strlen(str1)=8
strlen(str2)=无结束字符0,所以字符串溢出,不确定
strlen(str3)=3
例题2:实现strlen方法。
分析:既然字符串是以'\0'结尾的,那么实现strlen也就很简单了,直接从左往右遍历字符串,遇到'\0'就退出。
size_t strlen (const char * str)
{
const char *eos = str;
while( *eos++ )
;
return( eos - str - 1 );
}
那么,有没有不是以零结尾的字符串表示方法呢?实际上是有的。比如:UNICODE_STRING, ANSI_STRING。
这两种类型的字符串表示方法, 就不是以零结尾的了,而是以首地址和有效长度来定义字符串。
字符串的sizeof长度及strlen长度的更多相关文章
- 字符串长度函数strlen()
如下是我的测试文件: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { ...
- php中常用的字符串长度函数strlen()与mb_strlen()实例解释
int strlen ( string $string ) int strlen ( string $string ) 获取给定字符串的[字节]长度 成功则返回字符串$string的长度,如果$s ...
- 玩转PHP(一)---php中处理汉字字符串长度:strlen和mb_strlen
注:本文为小编原创,如若转载,请注明出处:http://blog.csdn.net/u012116457/article/details/42536039 今天正式开始学习PHP了,不过小编一不小心就 ...
- php获取字符串长度函数strlen和mb_strlen
php获取字符串长度函数strlen和mb_strlencount() - 计算数组中的单元数目,或对象中的属性个数strlen — 获取字符串长度,一个汉字为3个字符mb_strlen() - 获取 ...
- php中处理汉字字符串长度:strlen和mb_strlen
PHP内置的字符串长度函数strlen()无法正确处理中文字符串,它得到的只是字符串所占的字节数.对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是3倍 ...
- 字符串 前篇 ---- sizeof()操作符和strlen()库函数
本文不是研究sizeof(), strlen() 的深奥定义和原理,我们不会在理论上太过钻牛角尖.希望读这篇文章的你,也不要太过抠概念(不要拘泥于语法).我们只做 实用意义 的介绍和讨论. 在介绍字符 ...
- C# 计算字符串在控制台中的显示长度
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- 限制标题字符串的长度,超过长度的截取并加上"..."
/// <summary> /// 限制标题字符串的长度,超过长度的截取并加上"..." /// </summary> /// <param name ...
- string字符串长度和字节长度问题
string str = "abcdef 安安安"; int i = str.Length; byte[] bt = System.Text.Encoding.Default.Ge ...
随机推荐
- WebSocket协议-原理篇
本篇文章主要讲述以下几点: WebSocket的原理与机制 WebSocket与Socket.io WebSocket兼容性 WebSocket的原理与机制 WebSocket协议分为两部分:握手和数 ...
- 学习-spring data jpa
spring data jpa对照表 Keyword Sample JPQL snippet And findByLastnameAndFirstname - where x.lastname = ? ...
- A1083 List Grades (25 分)
Given a list of N student records with name, ID and grade. You are supposed to sort the records with ...
- Spring Cloud组件使用/配置小记
仅使用,无多少技术含量,权记于此以备忘. 微服务架构下的主要组件 服务注册组件:Consul.Etcd等 网关:Zuul.Spring Cloud Gateway等 容错框架:Hystrix 负载均衡 ...
- Kubernetes Dashboard 安装与认证
1.安装dashboard $ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/ ...
- 第21课 shared_ptr共享型智能指针
一. shared_ptr的基本用法 (一)与unique_ptr的比较 比较 shared_ptr unique_ptr 备注 初始化 ①shared_ptr<T> sp; sp.res ...
- 【网络知识之三】HTTPS协议
HTTPS是身披SSL外壳的HTTP.HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包.HTTPS使用的主要目的是提供对网站服务器的 ...
- K8S 如何实现将git代码下拉到指定的容器路径中
gitRepo 是 kubernetes Volume类型中的一种,gitRepo volume可以实现将git代码下拉到指定的容器路径中. 备注:实现此功能,Pod运行的节点都必需要安装git.换句 ...
- Unity和Jenkins真是绝配,将打包彻底一键化!
说起打包,我们的QA简直是要抓狂,这个确实我也很同情他们.项目最开始打包是另一个同事做的,打包步骤是有些繁琐,但是项目上线后,不敢轻易动啊!每次他们打包总要跟我抱怨,国内版本打包步骤要10多步还能忍, ...
- R数据挖掘 第一篇:聚类分析(划分)
聚类是把一个数据集划分成多个子集的过程,每一个子集称作一个簇(Cluster),聚类使得簇内的对象具有很高的相似性,但与其他簇中的对象很不相似,由聚类分析产生的簇的集合称作一个聚类.在相同的数据集上, ...