`
xiaoheliushuiya
  • 浏览: 404770 次
文章分类
社区版块
存档分类
最新评论

C++ 之 strlen()和sizeof()比较

 
阅读更多
一、sizeof

sizeof(...)是运算符,sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。在头文件中typedefunsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。

具体而言,当参数分别如下时,sizeof返回的值表示的含义如下:
数组——编译时分配的数组空间大小
指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4);
类型——该类型所占的空间大小;
对象——对象的实际占用空间大小;
函数——函数的返回类型所占的空间大小。函数的返回类型不能是void

二、strlen
strlen(...)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。
它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL

#include <iostream>
#include <cstring>

using namespace std;

void testOne(){}

int testTwo(){
 return 0;
} 

int main(){
	//静态数组
	  char str[20]="0123456789"; 
	  int a=strlen(str);  
      int b=sizeof(str); 
	  cout<<"strlen(str) "<<a<<endl  //a=10;
		  <<"sizeof(str) "<<b<<endl << endl;  //而b=20;
  
	  //指针
	  char* ss = "0123456789";
 	  cout<<"strlen(ss) "<<strlen(ss)<<endl  //10
		  //*ss是第一个字符 其实就是获得了字符串的第一位'0' 所占的内存空间,是char类型的,占了 1 位 
		   <<"sizeof(*ss) "<<sizeof(*ss)<<endl << endl
		  //ss是指向字符串常量的字符指针,sizeof 获得的是一个指针的之所占的空间,应该是长整型的,所以是4 
		  <<"sizeof(ss) "<<sizeof(ss)<<endl << endl;    //4 

	  char * parr = new char[10];
	  int len_one = strlen(parr); //22  值不确定 这取决于parr里面存了什么(从parr[0]开始知道遇到第一个NULL结束)  
	  int len_two = sizeof(parr); //4
	  int len_three = sizeof(*parr);  //1
	  cout <<"strlen(parr) "<< len_one << endl<<"sizeof(parr) " << len_two << endl << "sizeof(*parr) " << len_three << endl << endl;

	  //函数
	  //cout<<"testOne()"<<sizeof(testOne())<<endl;  函数返回为void 不能通过编译
	  cout<<"testTwo()  "<<sizeof( testTwo())<<endl<<endl;
	  return 0;
}

运行结果:


分享到:
评论

相关推荐

    c和c++中的strlen和sizeof的区别解读.txt

    strlen和sizeof的区别

    【C++】 strlen与sizeof计算char* 与char数组(转载记录) - toby1123yjh的博客 - CSDN

    【C++】 strlen与sizeof计算char* 与char数组(转载记录) - toby1123yjh的博客 - CSDN博客码:1/10【C++】 st

    sizeof和strlen区别

    分析sizeof和strlen具体区别(源码和解析)

    strlen 和 sizeof 的使用

    strlen和sizeof的区别 strlen 和 sizeof 的使用

    C、C++ 语言中的函数strlen和sizeof的区别

    strlen和sizeof的区别

    sizeof和strlen的区别

    sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信。例如:void *malloc(sizex_t size), size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream)

    sizeof 用法汇总 C和C++的语法

    sizeof()用法汇总 sizeof()功能:计算数据空间的字节数 1.与strlen()比较 strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。 .......

    C语言中的sizeof操作符用法及和strlen的区别

     sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。其返回值类型为size_t,在头文件stddef.h中定义。在32位系统中: char的sizeof值为1,char是我们编程能用的...

    后端,面试,c++ ,找工作

    ## sizeof和strlen的区别 sizeof是一个操作符,strlen是库函数。 sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结尾为‘0‘的字符串作参数。 编译器在编译时就计算出了sizeof的结果。而strlen函数...

    24_sizeof与strlen的区别1

    1. strlen 是个函数,只能以 char* (字符串)作为参数,来计算指定字符串 str 的度,但不 2. sizeof 是个单运算符,它的参数可以是数组

    C++开发面试知识点-C、C++、C++11、C++14

    自己秋招根据面经和基础知识学习总结的知识点,主要内容包括但不限于:volatile关键字、sizeof & strlen、const的作用、enum、inline、delete[] 与 delete、多态的作用、C++与Python的区别、深拷贝与浅拷贝、extern ...

    计算数值有几位,非sizeof和strlen算法.cpp

    主要是下载分不够了,希望上传代码赚几分回来。 小白yige,这些代码是学习C的时候习题代码,没有什么实用价值,高手就别来笑话我了,特别是那些和我一样还在自学的朋友相互之间交流一下。

    浅析C/C++中被人误解的SIZEOF

    2:sizeof与strlen的区别?3:sizeof(int)(*p)的值是多少? 代码如下:int a[10]; sizeof(a);//是多少? sizeof(a[10]);//是多少? void f(int a[10]) { cout&lt;&lt;sizeof(a)&lt;&lt;endl;//值是多少? }View Code...

    C_C++问题总结

    2.1 sizeof与strlen区别 2.2 strcpy、sprintf与memcpy 2.3 new/delete 与 malloc/free 2.4 确定一个数转化成二进制后是1的位的个数 2.5 ++i和i++的区别 3. 常见问题 3.1 数组名和指针的区别 3.2 指针和引用的区别 ...

    c++面试题基础分享.doc

    c++面试题53个问题 1.C++的三大特性 2.C和C++的区别 ...49.sizeof是一个操作符,strlen是库函数 50.写一个“标准”宏MIN 51.简述strcpy sprintf与mencpy的区别 52.链表与数组的区别 53.简述队列和栈的异同

    C语言中sizeof()与strlen()函数的使用入门及对比

    主要介绍了C语言中sizeof()与strlen()函数的使用入门及对比,同时二者在C++中的使用情况也基本上同理,是需要的朋友可以参考下

    C/C++中获取数组长度的方法示例

    学过C/C++的人都知道,在C/C++中并没有提供直接获取数组长度的函数,对于存放字符串的字符数组提供了一个strlen函数获取其长度,那么对于其他类型的数组如何获取他们的长度呢? 其中一种方法是使用sizeof(array) / ...

    C/C++程序员面试指南.杨国祥(带详细书签).pdf

    面试题19:sizeof和strlen的区别 3.5 结构体 面试题20:结构体是什么样的数据类型 面试题21:结构体可以直接赋值吗 面试题22:组织WAV文件头,并解析WAV格式的各项信息 面试题23:计算学生不及格的人数打印他们的...

    c++ 面试题 总结

    C++面试题 1.是不是一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态? virtual修饰符会被隐形继承的。 private 也被集成,只事派生类没有访问权限而已 virtual可加可不加 子类的...

    -C++参考大全(第四版) (2010 年度畅销榜

    这是一本关于C++语言的百科全书,包括C和C++的命令、功能、编程和应用等方面的内容。全书分为五个部分:C++基础:C子集;C++的专有特征;标准函数库;标准C++类库;C++应用程序范例。详细描述和演示了定义C++语言的...

Global site tag (gtag.js) - Google Analytics