本人c语言初学菜鸟一枚,今天通过敲了一段简单代码,发现strlen和sizeof之间的一些关系,总结如下:

  1. 用strlen计算数组长度要考虑进去\0
  2. 用sizeof计算字符串长度也要考虑进去\0
  3. 而sizeof在计算数组和strlen计算字符串长度(它们自己的领域里面)则不需要考虑\0
  4. 总结:字符数组与字符串不是相同的东西,在计算长度时,要用各自该用的东西(数组用sizeof,字符串用strlen)

例如下面这段代码,计算数组长度用到了strlen,那么b[]内必须为4,要考虑\0,且不能为其他数字,否则编译运行出来结果将为别的错误答案;然而将strlen改为sizeof,则,b[]内为3,不需要考虑\0,

填大于3的数字,假设为i,结果输出长度为i,不填也可以,将根据你{ }内实际的个数得到答案(题目中b[]不填输出为3),但是如果填了小于i的数,那么编译将不通过,编译器提示:error C2078: 初始值设定项太多。

 #include <stdio.h>
#include <stdlib.h>
#include<string.h> int main()
{
char b[] = {,,};
printf("%d\n", strlen(b));
system("pause");
return ;
}

另外:根据上面的程序还有注意的地方:

float b[ ],sizeof长度为4乘花括号内个数,char型为1乘,int为 4乘,double为8乘

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{
float b[] = {,};
printf("%d\n", sizeof(b));
system("pause");
return ;
}

下面和上面代码区别b[ ]={2,3}内加上了6,则sizeof计算数组长度时按照6来计算,结果为48(6*double的长度),另外定义数组时{ }内不能为空,否则会报错

 #include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{
double b[] = { , };
printf("%d\n", sizeof(b));
system("pause");
return ;
}

c语言中:strlen和sizeof的区别和它们分别交换各自作用领域(\0问题)时的细微差别!!!的更多相关文章

  1. C语言——strlen()和sizeof的区别

    strlen()和sizeof()的区别: strlen()——>C字符串库函数,返回字符串的真实长度.它是从内存某位置开始扫描,直到碰到结束符'\0'停止,返回计数器值. sizeof()—— ...

  2. 函数strlen()和sizeof的区别

    函数strlen()和sizeof的区别: #include<stdio.h> #include<stdlib.h> #include<string.h> #def ...

  3. 浅谈Java语言中ArrayList和HashSet的区别

    Java语言中ArrayList和HashSet的区别 2019-04-10   13:22:49 一.基本区别 首先一起看个实例,其代码如下: package com.MrZ_baby.com; i ...

  4. 面试题----C语言中exit和return的区别

    C语言中return和exit的区别 exit用于结束进程,返回的状态码是给操作系统使用或父进程使用的.return是堆栈返回,返回的值是给主调函数用的.主线程结束前会默认调用exit结束进程. ex ...

  5. Go语言中的byte和rune区别、对比

    Go语言中byte和rune实质上就是uint8和int32类型.byte用来强调数据是raw data,而不是数字:而rune用来表示Unicode的code point.参考规范: uint8 t ...

  6. Go语言中new和make的区别

    Go语言中new跟make是内置函数,主要用来创建分配类型内存. new( ) new(T)创建一个没有任何数据的类型为T的实例,并返回该实例的指针: 源码解析 func new func new(T ...

  7. strlen 与 sizeof 的区别

    void ngx_time_init(void) { ngx_cached_err_log_time.len = sizeof("1970/09/28 12:00:00") - 1 ...

  8. strlen和sizeof的区别

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

  9. strlen与sizeof的区别 [转]

    转自:http://www.cppblog.com/liangbo/archive/2006/10/06/13394.html 1.sizeof操作符的结果类型是size_t,它在头文件中typede ...

随机推荐

  1. Python初学者第八天 元组和字典

    8day 1.数据类型:元组 元组:有序的,不可变地数据的集合.但若包含其他可变元素,这些元素可变.显示的告诉别人,此处不可修改: a = (1,2,3,4,5,['1','a']) 2.数据类型:字 ...

  2. 设计模式:备忘录(Memento)模式

    设计模式:备忘录(Memento)模式 一.前言   备忘录模式用于保存和恢复对象的状态,相信大家看过我前面的拙作就会想到原型模式也能保存一个对象在某一个时刻的状态,那么两者有何不同的呢?原型模式保存 ...

  3. php简单的数组递归

    参照 http://www.oschina.net/code/snippet_105637_11401  的例子   $arr = array('aa' =>  array('bb' => ...

  4. Linux:配置HTTPS,获取ssl证书

    这里小仓鼠将Https配置流程记录下来 1.访问网站:https://www.aliyun.com/ss/?k=ssl 2.选择‘立即购买’ 3. 页面变换为: 4.点击‘立即购买’ 5.进行支付 6 ...

  5. 零售企业ERP系统慢

    数据库优化案例 https://www.cnblogs.com/double-K/p/9210982.html 写在前面 记得在自己学习数据库知识的时候特别喜欢看案例,因为优化的手段是容易掌握的,但是 ...

  6. 「C语言」在Windows平台搭建C语言开发环境的多种方式

    新接触C语言,如何在Windows下进行C语言开发环境的搭建值得思考并整理. 以下多种开发方式择一即可(DEV C++无须环境准备). 注:本文知识来源于  Windows 平台搭建C语言集成开发环境 ...

  7. 转 delete 和 delete []的真正区别

    c++中对new申请的内存的释放方式有delete和delete[两种方式,到底这两者有什么区别呢? 1.我们通常从教科书上看到这样的说明:delete 释放new分配的单个对象指针指向的内存dele ...

  8. web项目脱离Eclipse在Tomcat部署并配置Eclipse调试

    简单来说,把WEB项目打成war包后放到webapps目录下启动tomcat便部署成功了,但是因为与Eclipse没有关联,故而无法Debug调试代码.这时在Tomcat的catalina.sh脚本里 ...

  9. Struts2注解开发

    Hibernate和spring框架的开发前边总结了,这次看一下流行的MVC流程框架Struts2的注解开发吧.Struts2主要解决了从JSP到Action上的流程管理,如何进行Uri和action ...

  10. BZOJ4827:[HNOI2017]礼物(FFT)

    Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手环,一个留给自己,一 个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是在 ...