一.sizeof

sizeof(...)是运算符,参数可以是数组,指针,类型,对象,函数等。

它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。

sizeof 返回的值表示的含义如下:

数组 -编译时分配的数组空间大小;

指针 - 存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4 );

类型 -该类型所占的空间大小;

对象 -对象的实际占用空间大小;

函数 - 函数的返回类型所占的空间大小。函数的返回类型不能是void 。

二.strlen

 strlen(...)是函数,要在运行时才能计算。参数必须是字符型指针(char * )。当数组名为参数传入时,实际上数组就会退化成指针了。

它的功能是:返回字符串的长度该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符 NULL 。返回的长度大小不包括NULL 。

大部分编译程序在编译的时候就把的的的sizeof  计算过了的英文类型或是变量的长度这就是的的的sizeof(X)可以用来定义数组维数的原因

举几个例子:

char str [20] =“0123456789”;

int a = strlen(str); / * A = 10; strlen的计算字符串的长度,以\ 0' 为字符串结束标记。

Int b = sizeof(str); / * B = 20;的sizeof 计算的则是分配的数组STR [20] 所占的内存空间的大小,不受里面存                                         储的内容影响

char * str1 =“absde”;

char str2 [] =“absde”;

char str3 [8] = {'a',};

char ss [] =“0123456789”;

输出:

sizeof(str1)= 4;

sizeof(str2)= 6;

sizeof(str3)= 8;

sizeof(SS)= 11;

首先说明一点, char 类型占一个字节,所以 sizeof(char) 是 1 ,这点要理解

str1 是一个指针,只是指向了字符串“absde” 而已。所以的的sizeof(str1)不是字符串占的空间也不是字符数组占的空间,而是一个字符型指针占的空间。所以的的sizeof(str1 )= sizeof(char *)= 4 ,在C / C ++ 中一个指针占4 个字节

str2 是一个字符型数组.C / C ++ 规定,对于一个数组,这个报道查看数组占位的总空间,所以的的的sizeof(STR2)取得的是字符串“absde” 占的总空间。“absde” 中,共有absde \ 0 六个字符,所以STR2 数组的长度的英文6 ,所以的sizeof(STR2)= 6 *的sizeof(char)的= 6

str3 已经定义成了长度是8 的数组,所以的的的的sizeof(STR3)为8

str4 和str2 类似,' 0''1 '...'9' 加上'\ 0' 共11 个字符,所以ss 占的空间是 11

总之,对于指针, sizeof 操作符返回这个指针占的空间,一般是4 个字节;而对于一个数组,sizeof 返回这个数组所有元素占的总空间。char * 与char [] 容易混淆,一定要分清,而且字符* = “AAA” 的写法现在不被提倡,应予以避免

而 strlen的不区分是数组还是指针,就读到\ 0 为止返回长度。而且strlen的是不把\ 0 计入字符串的长度的

【C语言】size与strlen的区别解析相关推荐

  1. C语言 sizeof 和 strlen 函数区别 - C语言零基础入门教程

    目录 一.sizeof 函数与 strlen 函数区别 1.获取字符串长度 – 针对字符串 2.获取指针/数组长度 – 针对指针/数组 3.sizeof 获取内存大小 4.经典案例 二.猜你喜欢 零基 ...

  2. C语言 - sizeof和strlen的区别

    sizeof和strlen的区别: 1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型. 该类型保证能容纳实现所建立的最大对象的字节大小. 2.s ...

  3. C语言sizeof与strlen的区别与使用

    前言:本文章主要用于个人复习,追求简洁,感谢大家的参考.交流和搬运,后续可能会继续修改和完善. 因为是个人复习,会有部分压缩和省略. 一.sizeof 1.sizeof用来计算类型或变量所占空间的大小 ...

  4. C语言sizeof和strlen的区别

    主要区别如下: 1.sizeof是运算符,strlen是C语言标准库函数. 2. strlen 测量的是字符串的实际长度,以'\0' 结束,返回结果不包括'\0' . 3.而sizeof 测量的是字符 ...

  5. C语言 memcpy 和 strcpy 函数区别 - C语言零基础入门教程

    目录 一.memcpy 函数/strcpy 函数简介 二.memcpy 函数/strcpy 函数实战 1.strcpy 函数属于字符串拷贝 2.memcpy 函数属于内存拷贝 三.猜你喜欢 零基础 C ...

  6. C语言 strcpy 和 strcpy_s 函数区别 - C语言零基础入门教程

    目录 一.strcpy_s 函数/strcpy 函数简介 1.strcpy 函数语法 2.strcpy_s 函数语法 二.strcpy/strcpy_s 函数实战 三.猜你喜欢 零基础 C/C++ 学 ...

  7. c/c++中sizeof()、strlen()、length()、size()详解和区别

    c/c++中获取字符串长度.有以下函数:size().sizeof() .strlen().str.length(); 一.数组或字符串的长度:sizeof().strlen() 1.sizeof() ...

  8. C++ string 成员函数 length() size() 和 C strlen() 的区别

    1.函数申明 C++ string 成员函数 length() 等同于 size(),但是和 C 库函数 strlen() 有着本质区别,使用时切勿混淆.首先看一下三个函数的申明: // 返回 str ...

  9. 【C语言】sizeof和strlen的区别

    一.size和strlen的异同 二.数组名意义的两个特例 三.结合实例分清sizeof和strlen 1.一维数组 易错解析 2.字符数组 易错解析 3.二维数组 易错解析 一.size和strle ...

  10. fread、fwrite、fopen函数的简单使用和open、read、write区别解析

    这几个函数的区别:fread.fwrite.fopen和open.read.write区别解析 标准C库函数的简单使用 fopen函数原型: #include <stdio.h> FILE ...

最新文章

  1. python画图的模块_python强大的绘图模块matplotlib示例讲解
  2. ML:根据不同机器学习模型输出的预测值+且与真实值相减得到绝对误差对比+误差可视化
  3. nginx: [error] invalid PID number in /usr/local/webserver/nginx/logs/nginx.pid
  4. 镜像服务器文件实时监控同步程序
  5. 前后端分离——token超时刷新策略
  6. lintcode循环数组之连续子数组求和
  7. http 请求 超时时间设置
  8. 解决conda install安装arch报错的问题
  9. php的注入点,Php注入点构造代码
  10. 中式装修怎么做,有哪些注意事项?
  11. 【To Do!】程序员面试金典——18.8子串判断
  12. python有哪些好的学习资料或者博客
  13. Android集成腾讯TBS_X5内核的一些解决方法
  14. 计算机中函数的括号怎么输,Excel函数中括号的使用
  15. 【目标流畅阅读文献】kick off
  16. python爬虫IP地址解析爬取(IP38.com)
  17. Flutter上传多张图片
  18. ## DNF地狱猫官方版本公告
  19. 溯源供应链引擎APS的历史(蔡颖)
  20. KK 给年轻人的99条建议

热门文章

  1. android大作业报告总结,android大作业总结报告.doc
  2. vtk实现一个简易的RubberBand 并求矩形内部hu平均值和最值
  3. 在WordPress网站上添加鼠标点击特效和网页背景特效
  4. 学英语《每日一歌》之Traveling Light
  5. python图中图_在Python中图中的图中的图
  6. 作业2.EVE ensp 模拟器CONSOLE接口密码设置
  7. 不积跬步无以至千里013
  8. JavaMail gmail邮箱,gmx邮箱,disroot邮箱,protonmail邮箱,tutanota邮箱以及阿里云服务器邮箱配置
  9. 2019-11-10训练总结
  10. 什么是前端开发工程师?