sizeof运算符和strlen()函数
首先放上代码和运行结果。(在VC6.0上运行)
#include<stdio.h>
#include<string.h> int main(void)
{
char s1[]="YeHuan";
char *s2="YeHuan";
char s3[]="Ye\0Huan";
char *s4="Ye\0Huan";
printf("sizeof(s1) %d\n",sizeof(s1));
printf("sizeof(s2) %d\n",sizeof(s2));
printf("sizeof(s3) %d\n",sizeof(s3));
printf("sizeof(s4) %d\n",sizeof(s4));
printf("sizeof(\"YeHuan\") %d\n",sizeof("YeHuan"));
printf("sizeof(\"Ye\\0Huan\") %d\n",sizeof("Ye\0Huan"));
printf("strlen(s1) %d\n",strlen(s1));
printf("strlen(s2) %d\n",strlen(s2));
printf("strlen(s3) %d\n",strlen(s3));
printf("strlen(s4) %d\n",strlen(s4));
printf("strlen(\"YeHuan\") %d\n",strlen("YeHuan"));
printf("strlen(\"Ye\\0Huan\") %d\n",strlen("Ye\0Huan"));
return ;
}
运行结果如下。
sizeof(s1) 7
sizeof(s2) 4
sizeof(s3) 8
sizeof(s4) 4
sizeof("YeHuan") 7
sizeof("Ye\0Huan") 8
strlen(s1) 6
strlen(s2) 6
strlen(s3) 2
strlen(s4) 2
strlen("YeHuan") 6
strlen("Ye\0Huan") 2
下面本人对这个运行结果作简要分析。
首先sizeof运算符是计算后面的变量(或者常量、数组名、类型标识符等等)所占内存空间字节大小,该运算结果在运行之前是确定的。
所以一个数组所占字节大小恰好是数组内元素个数乘以每个元素占字节大小,而数组内元素的个数(仅考虑一维数组)在定义数组时的中括号内给出,如不给出,则由初始化的内容决定。
由此可知s1数组内元素个数为7,因为后面字符串需要占用7个字节(包括字符串结尾标记'\0'),所以得到运行结果的第1、5行。
同理可得s3数组内元素个数为8(虽然里面有个'\0',但是要想完全存放里面所有的字符必须要8个字节),所以得到运行结果的第3、6行。
因为指针变量占4个字节(win32控制台应用程序中,包括字符指针、整型指针、数组指针、结构体指针、函数指针、二级指针、多级指针、通用指针void *等等),所以得到运行结果的第2、4行。
strlen()函数用于计算一个字符指针指向的区域(自动向后延伸,到'\0'结束)所能得到的字符串的长度(即字符个数,不包括结尾标记),所以得到运行结果的第7到12行。
sizeof运算符和strlen()函数的更多相关文章
- sizeof运算符和strlen函数的区别
1.sizeof是运算符,而strlen是函数. 2.sizeof操作符的运算结果为size_t,他在头文件中的typedef为unsigned int.该类型保证能容纳所操作对象的最大字节大小. 3 ...
- C++中sizeof操作符与strlen函数
sizeof操作符: sizeof是一个操作符,返回一条表达式或一个类型名字所占的字节数.返回值一个常量表达式,类型为size_t. size_t sizeof(type) size_t sizeof ...
- sizeof运算符、malloc函数及free函数
一.sizeof运算符的用法 1.sizeof运算符给出某个类型或变量在内存中所占据的字节数. int a; sizeof(a)=4; //sizeof(int)=4; double b; si ...
- sizeof运算符、虚函数、虚继承考点(待修改)
参考: http://blog.csdn.net/wangyangkobe/article/details/5951248 下面的文章解释有错误,不要看.......... 记住几句话: 编译器为每个 ...
- C++ sizeof操作符的用法和strlen函数的区别
摘要:本人首先介绍了C++中sizeof操作符的用法和注意事项,其次对比了和strlen的区别和使用,方便大家在写代码的时候查阅,和面试.笔试的时候复习. 目录: sizeof的用法: sizeof和 ...
- C语言中sizeof、strlen函数的部分理解
一.测试环境 Win10 + Visual Studio 2017 二.测试代码 #include "pch.h" #include <iostream> #inclu ...
- sizeof和strlen函数区别
一.sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等. 它的功能是:获得保 ...
- c语言之sizeof总结+strlen函数
一.sizeof的概念 Sizeof是C语言的一种单目操作符,如C语言的其他操作符++.–等.它并不是函数.Sizeof操作符以字节形式给出了其操作数的存储大小.操作数可以是一个表达式或括在括号内的类 ...
- C语言strlen函数和sizeof操作符
字符'x'于字符串"x"的区别 'x' 属于基本类型(char)字符类型-----------------由1个字符组成('x') "x"属于派生类型(char ...
随机推荐
- # [SDOI2019]移动金币 阶梯博弈 dp
[SDOI移动金币 链接 vijos 思路 阶梯博弈,dp统计. 参见wxyww 代码 #include <bits/stdc++.h> using namespace std; cons ...
- [洛谷P3092]【[USACO13NOV]没有找零No Change】
状压\(DP\) + 二分 考虑构成:\(k<=16\)所以根据\(k\)构造状压\(dp\),将所有硬币的使用情况进行状态压缩 考虑状态:数组\(dp[i]\)表示用\(i\)状态下的硬币可以 ...
- markdown转html
今天临时要写接口文档,然后发现部门给的文档是markdown文件的,而接口文档是要html格式的,因此想直接把markdown转为html 这里我使用的是marked 首先初始化一个node项目 np ...
- [POI2008]PER-Permutation
[POI2008]PER-Permutation 带重复的康托展开! 根本不需要中国剩余定理就可以A掉! 看完题面你会惊人地发现这好像一个康托展开!(显然是不同的啦) 首先我们来看康托展开这个东西在数 ...
- 淘宝接口-IP返回运营商
#!/usr/bin/evn python# -*- coding:utf-8 -*-import jsonimport urllib2import datetimeimport reimport Q ...
- FileInputFormat 的实现之TextInputFormat
说明 TextInputFormat默认是按行切分记录record,本篇在于理解,对于同一条记录record,如果被切分在不同的split时是怎么处理的.首先getSplits是在逻辑上划分,并没有物 ...
- Mysql之Incorrect string value: '\xF0\x9F\x98\x89 \xE6... 保存emoji表情
错误信息如下: Incorrect string value: '\xF0\x9F\x98\x89 \xE6...' 问题产生的原因是字符串不兼容4字节的unicode导致的,一般我们常见的表情编码等 ...
- Db2 Terminate Vs Connect Reset , Disconnect
db2 Terminate and db2 connect Reset both break the connection to a database. Connect ...
- wikiquote
發現了一個很好玩的網站wikiquote,上面有很多引用的句子 比如關於編程語言的說法 https://en.m.wikiquote.org/wiki/Category:Programming_lan ...
- ES6 - 字符串的扩展(模版字符串)
模板字面量的最简单语法,是使用反引号( `)(Tab上面那个键)来包裹普通字符串,而不是用双引号或单引号. <!DOCTYPE html> <html lang="en&q ...