C语言中sizeof、strlen函数的部分理解
一、测试环境
Win10 + Visual Studio 2017
二、测试代码
#include "pch.h"
#include <iostream>
#include <string>
#include <vector> using namespace std; int main(void) {
char a[] = "hello";
char b[] = { 'h','e','l','l','o'};
char c[] = "hello";
const char *d = "hello";
cout << "sizeof(a) = " << sizeof a << ' ' << "strlen(a) = " << strlen(a) << '\n' <<endl;
cout << "sizeof(b) = " << sizeof b << ' ' << "strlen(b) = " << strlen(b) << '\n' << endl;
cout << "sizeof(c) = " << sizeof c << ' ' << "strlen(c) = " << strlen(c) << '\n' << endl;
cout << "sizeof(d) = " << sizeof d << ' ' << "strlen(d) = " << strlen(d) << '\n' << endl;
return ;
}
三、测试结果
结果1(x86):
sizeof(a) = strlen(a) = sizeof(b) = strlen(b) = sizeof(c) = strlen(c) = sizeof(d) = strlen(d) = 5
结果2(x64):
sizeof(a) = strlen(a) = sizeof(b) = strlen(b) = sizeof(c) = strlen(c) = sizeof(d) = strlen(d) =
四、测试结果分析
图 1 变量a的内容
图 2 变量b的内容
图 3 变量c的内容
图4 变量d内容
1、sizeof函数的使用
sizeof 运算符可用于获取类、结构、共用体和其他用户自定义数据类型的大小:
sizeof (data type)
data type:要计算大小的数据类型,包括类、结构、共用体和其他用户自定义数据类型。
实质上,char属于整数类型,存储的是整数,而不是字符,计算机用特定的数字编码来处理字符,比如常用的源自于美国的ASCII编码。标准的ASCII码的范围是0~127,只需要7位二进制数即可表示,通常,char类型被定义为8位存储单元(1 Byte)。C语言一般把1字节定义为char类型占用的位(bit)数。【一般各种基本类型的数据占用位数的大小,均有相应的文件进行限制】
sizeof函数在计算对象的大小时,都是先转换成对象类型,然后对对象类型进行计算。
如果data type是指针的话,则计算的是计算机内部地址总线的宽度。指针,记录着另一个对象的地址,因为其存放地址的功能,造成其长度等于计算机内部总线地址的长度,与指针具体指向哪一类型的数据没有关系。(32-bit OS 为 4,64-bit OS 为8)
综上,可以容易的理解为:char a[10]、char b[10]为同一类型,char c[]根据实际的复制看作是char c[6],char * d为指针,已知各自的结果为上图所示。
2、strlen函数的使用
strlen()函数用于计算字符串中字符的长度,在长度的计算过程中,遇到规定的截止符则停止计算。
C语言中sizeof、strlen函数的部分理解的更多相关文章
- C语言中sizeof()的用法
语法 sizeof有三种语法形式: 1.sizeof(object); //sizeof(对象); 2.sizeof(type_name); //sizeof(类型); 3.sizeof object ...
- 对C语言中sizeof细节的三点分析
转自对C语言中sizeof细节的三点分析 1.sizeof是运算符,跟加减乘除的性质其实是一样的,在编译的时候进行执行,而不是在运行时才执行. 那么如果编程中验证这一点呢?ps:这是前两天朋友淘宝面试 ...
- c语言中的rewind函数,Win CE 不支持,可用fseek函数替换
FILE *read = fopen(cXmlFile,"rb"); if (read) { fseek(read, 0L, SEEK_END); int len = ftell( ...
- C语言中sizeof与strlen的区别
1.sizeof sizeof为编译时期被替换,不会等到程序运行再来判断,所以sizeof返回的是数组的总字节数 #include<stdio.h> int main() { ]={'a' ...
- c语言中的malloc函数
少壮不努力,大一的时候c语言学得不扎实,最近学数据结构的时候看到c语言中malloc函数都不知道了,这里记录一下,避免以后再忘. malloc的全称是memory allocation,中文叫动态内存 ...
- C语言中sizeof的用法
今天同学问我sizeof可不可以计算结构体的大小,我竟然忘了C语言还有sizeof这个函数,我是多久没有写程序了啊!!!惭愧,上研究生后写嵌入式方面的程序就特别少了,看来以后还要经常来练练手才行.现在 ...
- C语言中sizeof与strlen区别
本文转载自:http://www.2cto.com/kf/201109/105100.html 1. 以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在代码中写"abc& ...
- c语言中:strlen和sizeof的区别和它们分别交换各自作用领域(\0问题)时的细微差别!!!
本人c语言初学菜鸟一枚,今天通过敲了一段简单代码,发现strlen和sizeof之间的一些关系,总结如下: 用strlen计算数组长度要考虑进去\0 用sizeof计算字符串长度也要考虑进去\0 而s ...
- linux下C语言中的flock函数用法 【转】
表头文件 #include<sys/file.h> 定义函数 int flock(int fd,int operation); 函数说明 flock()会依参数operation所指 ...
随机推荐
- L1-060 心理阴影面积
这是一幅心理阴影面积图.我们都以为自己可以匀速前进(图中蓝色直线),而拖延症晚期的我们往往执行的是最后时刻的疯狂赶工(图中的红色折线).由红.蓝线围出的面积,就是我们在做作业时的心理阴影面积. 现给出 ...
- 以太坊Bootstrap和Kademlia算法实现逻辑简介(基于cpp-ethereum)
- 微信机器人 返现机器人 pc版本 移动版本 java开发 小范省钱
微信机器人 返现机器人 pc版本 移动版本 java开发 小范省钱 微信搜索微信号 fanli-x 或 扫描下方二维码,可查看效果. 非web版微信,pc/移动版微信 支持新号24小时 不封号! 有任 ...
- 将Blender3d软件语言改为中文设置(win各版本+Linux)
Blender作为开源软件,为全世界的媒体工作者和艺术家而设计,可以被用来进行 3D 可视化,同时也可以创作广播和电影级品质的视频,另外内置的实时 3D 游戏引擎,让制作独立回放的 3D 互动内容成为 ...
- Linux基础命令--date
date命令格式用法 yao@yao:~/shells/tmp$ date +%Y%m%d20190405 yao@yao:~/shells/tmp$ date +%Y%m%d%H%M%S201904 ...
- 贝塞尔(Bezier) 曲线 研究
贝塞尔曲线最近经常接触到,今天研究了一下. 原理 关于它的原理,网上有很多. 1.一阶 2.二阶 3.多阶 可以看到,多阶可以慢慢降阶为一阶贝塞尔曲线. //一阶 private Vector3 Ba ...
- git 合并分支到master
git 合并分支到master 假如我们现在在dev分支上,刚开发完项目,执行了下列命令 git add .git commit -m ‘dev'git push -u origin dev 然后 ...
- 简单网络管理协议(SNMP)
SNMP是TCP/IP网络中应用最为广泛的网络管理协议,工作在TCP/IP参考模型的应用层,是一种面向无连接的协议 功能:SNMP的功能是使网络设备之间能方便的交换管理信息,从而使网络管理员了解网络运 ...
- Linux 常用命令和使用技巧
一.Shell命令 shell通配符------"*"."?"."[]" shell管道-------|把命令连接起来,把第一个命令的输出作 ...
- python之99乘法表
#99乘法表 fir=1 while fir<=9: sec=1 while sec<=fir: print(str(fir)+'*'+str(sec)+'='+str(fir*sec)) ...