C语言strlen函数和sizeof操作符
字符'x'于字符串"x"的区别
'x' 属于基本类型(char)字符类型-----------------由1个字符组成('x')
"x"属于派生类型(char数组)字符串类型-----------由2个字符组成('x'和空字符'\0')

strlen函数与sizeof操作符
strlen函数原型为 extern int strlen(char *s) ,用来计算字符串s的长度(不包括'\0'),使用时需要引入头文件 #include <string.h>
sizeof是C语言的一种单目操作符,同其他操作符++、--等类似,它并不是函数。其作用就是返回一个对象或者类型所占的内存字节数。
sizeof的示例程序:
#include <stdio.h> int main(void)
{
char* str1="absde"; //指向字符串的指针
char str2[]="absde";
char str3[]={'a',};
printf("sizeof(str1) = %d\n",sizeof(str1));
printf("sizeof(str2) = %d\n",sizeof(str2));
printf("sizeof(str3) = %d\n",sizeof(str3)); return ;
}
运行结果:

【分析】
str1是一个指针,只是指向了字符串"absde"而已。所以sizeof(str1)不是字符串占的空间也不是字符数组占的空间,而是一个字符型指针占的空间。在C/C++中一个指针占4个字节,所以sizeof(str1)=4
str2是一个字符型数组。C/C++规定,对于一个数组,返回这个数组占的内存空间。"absde"中,共有'a','b','s','d','e','\0'六个字符,所以sizeof(str2)=6*sizeof(char)=6
str3已经定义成了长度是8的字符数组,分配了8个字节的内存空间,所以sizeof(str3)=8
总之,对于指针,sizeof操作符返回这个指针占的内存空间,一般是4个字节;而对于一个数组,sizeof返回这个数组所有元素占的总空间。char*与char[]容易混淆,一定要分清,而char* str1="absde"的写法现在也不被提倡,应予以避免。
关于二者的区别可见以下程序
#include <stdio.h>
#include <string.h> //strlen函数的头文件
#define PRAISE "What a super marvelous name!" //测试字符串
int main(void)
{
char name[] = "Wsying"; //测试字符串
printf("strlen = %d sizeof = %d\n",strlen(name), sizeof(name));
printf("strlen = %d sizeof = %d\n",strlen(PRAISE), sizeof(PRAISE)); return ;
}
运行结果:

【分析】
对于name这个字符数组(字符串),strlen的返回值6恰好为"wsying"的长度(‘\0’之前停止计数);因为我们声明了name数组包含了40个单位的char型,1个char型在内存中占据1个字节,所以sizeof的运算结果为name在内存中占据的字节数为40;
对于PRAISE(即"What a super marvelous name!")这个字符串,sizeof运算结果比strlen的结果大1,字符串占据的字节数(char类型仅占1个字节)比他的长度大1,这是因为sizeof把结束字符'\0'也算进去了('\0'也要占据内存空间),我们并没有像name那样定义为这个字符串分配多大内存,计算机自己计算它占据的字节数。
C语言strlen函数和sizeof操作符的更多相关文章
- strcpy,strlen, strcat, strcmp函数,strlen函数和sizeof的区别
//计算字符串实际长度 //strlen()函数:当遇到'\0'时,计算结束,'\0'不计入长度之内,如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到'\0 ...
- c语言之sizeof总结+strlen函数
一.sizeof的概念 Sizeof是C语言的一种单目操作符,如C语言的其他操作符++.–等.它并不是函数.Sizeof操作符以字节形式给出了其操作数的存储大小.操作数可以是一个表达式或括在括号内的类 ...
- C++ sizeof操作符的用法和strlen函数的区别
摘要:本人首先介绍了C++中sizeof操作符的用法和注意事项,其次对比了和strlen的区别和使用,方便大家在写代码的时候查阅,和面试.笔试的时候复习. 目录: sizeof的用法: sizeof和 ...
- C++中sizeof操作符与strlen函数
sizeof操作符: sizeof是一个操作符,返回一条表达式或一个类型名字所占的字节数.返回值一个常量表达式,类型为size_t. size_t sizeof(type) size_t sizeof ...
- sizeof运算符和strlen函数的区别
1.sizeof是运算符,而strlen是函数. 2.sizeof操作符的运算结果为size_t,他在头文件中的typedef为unsigned int.该类型保证能容纳所操作对象的最大字节大小. 3 ...
- 字符串 前篇 ---- sizeof()操作符和strlen()库函数
本文不是研究sizeof(), strlen() 的深奥定义和原理,我们不会在理论上太过钻牛角尖.希望读这篇文章的你,也不要太过抠概念(不要拘泥于语法).我们只做 实用意义 的介绍和讨论. 在介绍字符 ...
- C语言中sizeof、strlen函数的部分理解
一.测试环境 Win10 + Visual Studio 2017 二.测试代码 #include "pch.h" #include <iostream> #inclu ...
- sizeof和strlen函数区别
一.sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等. 它的功能是:获得保 ...
- C语言-字符串函数的实现(一)之strlen
C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...
随机推荐
- asp.net ToString()格式汇总
C 货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5") 00025 E 科学型 25000.ToString ...
- Oracle数据库中char, varchar, nvarchar的差异
1. char 固定长度,最长n个字符. 2. varchar 最大长度为n的可变字符串. (n为某一整数,不同数据库,最大长度n不同) char和varchar区别: ...
- 机器学习技法-神经网络(NNet)
课程地址:https://class.coursera.org/ntumltwo-002 重要!重要!重要~ 一.神经网络(NNet)的动机 神经网络有很久的历史,由感知机(perceptron)模型 ...
- dedecms SQL数据库连接信息注解(借鉴)
<?php $cfg_dbhost = 'localhost'; //数据库地址,这里的localhost指的是本机$cfg_dbname = 'hunuo'; //数据库名$cfg_dbuse ...
- R 读取clipboard内容 (MAC)
在mac上,R读取复制的data.很简单,一行命令 read.table(pipe("pbpaste"))
- Wamp安装使用+Git for Windows
相信很多朋友都曾在windows上做过web开发,我们常用的Web应用程序平台是:Apache+Mysql+Perl/PHP/Python,在windows下集成称为WAMP.web开发新手有时候由于 ...
- java script 闭包
闭包的概念真的是很绕,我就来点实际的代码. 当我用下面的代码的时候 发生了闭包,当执行onclick事件的时候,变量一直引用了外部函数的变量,结果i总是4 function newLoad() { / ...
- 2015GitWebRTC编译实录5
2015.07.20 libaudio_encoder_interface/libaudio_decoder_interface 编译通过将encoder,decoder两个lib合并了,后面需要看看 ...
- leetcode 121. Best Time to Buy and Sell Stock ----- java
Say you have an array for which the ith element is the price of a given stock on day i. If you were ...
- MongoDB副本集搭建及备份恢复
一.MongoDB副本集(repl set)介绍 早起版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主: 目前已经淘汰了ma ...