博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
srtlen实现以及与sizeof的比较
阅读量:4881 次
发布时间:2019-06-11

本文共 1563 字,大约阅读时间需要 5 分钟。

这里仅为个人整理,大部分来自

 一、strlen函数

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

1、用法:

针对碰到第一个字符串结束'\0'为止的两点说明:

(1)见下例:

1 char a[10]={
'\0'};2 cout<
<

从开始到遇到一个'\0'为止。

(2)见下例:

1 char a[10];2 cout<
<

从开始到遇到一个'\0'为止。

2、函数实现

1 /*递归版*/ 2 size_t strlen(const char *pStr) 3 { 4     assert(pStr !=NULL); 5     if(*pStr !='\0') 6     { 7         return 1+strlen(++pStr); 8     } 9     else10         return 0;11 }12 13 /*非递归版*/14 size_t strlen(const char *pStr)15 {16     assert(pStr !=NULL);17     size_t psize=0;18     while(*pStr !='\0')19     {20         psize++;21         pStr++;22     }23     rturn psize;24 }

二、sizeof

是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。sizeof( )返回的是变量声明后所占的内存数,不是实际长度。

1、这是一个依赖编译系统的值,头文件为stddef.h中,一般定义为:

1 typedef unsigned int size_t;

2、语法

1 sizeof(object);     //sizeof(对象);2 sizeof(type_name);  //sizeof(类型);3 sizeof object;      //sizeof 对象;和第一行比少一个括号

三、strlen函数和sizeof的区别

(1)sizeof不是函数,仅仅是一个取字节运算符,strlen是函数;

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

(3)数组做sizeof的参数不退化,传递给strlen就退化为指针了;

更多见百科。

区别举例:

(1)针对静态数组:

1 char str[20]="0123456789";2 int a=strlen(str);      //a=103 int b=sizeof(str);      //b=20;

(2)针对指针

1 char* ss = "0123456789";    //ss是指向字符串常量的字符指针2 sizeof(ss)      //结果 4,sizeof 获得的是一个指针的值所占的空间,应该是长整型的,所以是43 sizeof(*ss)     //结果 1, *ss是第一个字符 其实就是获得了字符串的第一位'0' 所占的内存空间,是char类型的,占了 1 位4 strlen(ss)= 10  //如果要获得这个字符串的长度,则一定要使用 strlen

注:从对比知,若想获得一个字符串的长度,一定要使用strlen 

转载于:https://www.cnblogs.com/love-yh/p/7298253.html

你可能感兴趣的文章
Fragment 的基本使用
查看>>
一个谜语的十一个答案 (绝对经典)笑死人了
查看>>
mvc的个别对输入数据的验证
查看>>
IBATIS事务处理 - - 博客频道 - CSDN.NET
查看>>
autoit学习安装说明及例子
查看>>
Linux常用命令(一)
查看>>
机器学习技法9-Decision Tree
查看>>
啥是文档碎片
查看>>
Nat Med:单独使用anti-CTLA4治疗前列腺癌效果差的原因
查看>>
泛型擦除
查看>>
jQuery控制form表单元素聚焦
查看>>
wpf+.net 4.5 surface2.0 = 异步多点触控 时间轴 part1
查看>>
[android]不解锁刷机
查看>>
Ural1519 Formula 1
查看>>
SQL Server 收缩日志
查看>>
安装ubuntu10.10后,如何配置一个Apache+MySQL+PHP环境
查看>>
UIAlertView、 UIActionSheet
查看>>
TinyWS —— 一个C++写的简易WEB服务器(三)
查看>>
jsp+struts2登录框架模板
查看>>
luogu P3410 拍照
查看>>