本人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. CVE-2015-1642 POC

    月初,玄武实验室的“每日安全动态”推送了一篇office UAF漏洞利用的文章,之前对office上UAF漏洞利用占位问题有些疑问,刚好就借助这篇文章重现了一下.其中堆喷射部分不是特别稳定,漏洞成因和 ...

  2. VMware安装VMware tool后mount /dev/cdrom /mnt成功挂载含rpm包的镜像

    安装虚拟机后如果不安装vmware tool使用mount /dev/cdrom /mnt可以成功挂在含rpm包的镜像,但是安装VMware tool后挂在后/mnt中是错误的内容.查了半天后无果,自 ...

  3. June 25th 2017 Week 26th Sunday

    There is always that one song that brings back old memories. 总有那么一首歌,让你想起那些旧的回忆. There are seveal so ...

  4. 用sql语句实现年龄分段统计

    SELECT CASE WHEN (age >= 10 AND age <= 20) THEN '10-20' WHEN (age >= 21 AND age <= 30) T ...

  5. JAVA JAVA面试题和项目面试核心要点精华总结(想进大公司必看)

    http://blog.csdn.net/ourpush/article/details/53706524 1.常问数据库查询.修改(SQL查询包含筛选查询.聚合查询和链接查询和优化问题,手写SQL语 ...

  6. Selenium基础知识(元素定位的调试)

    对一个不能直接定位的元素来说,调试是很常见的事,所以这里也简单总结了一下. 调试定位元素的工具很多,介绍也多,就不一一介绍了.下次有时间再补充.以下是我常用调试的方法(浏览器自带的控制台调试,仅介绍一 ...

  7. Selenium基础知识(详解IDE命令、css及xpath定位一)

    1. ide常用命令,参考 http://sariyalee.iteye.com/blog/1743350  2. ide介绍,参考 http://blog.csdn.net/oscar999/art ...

  8. ON_COMMAND ON_MESSAGE ON_NOTIFY区别与联系

    ON_COMMAND是菜单和工具栏项处理消息的宏 ON_MESSAGE是处理自定义消息的宏 ON_NOTIFY 是控件向其父窗口发送消息处理的宏 对这几个消息的理解要先了解一下Window消息的背景. ...

  9. 浅谈sql之连接查询

    SQL之连接查询 一.连接查询的分类 sql中将连接查询分成四类: 内链接 外连接 左外连接 右外连接 自然连接 交叉连接 二.连接查询的分类 数据库表如下: 1.学生表 2.老师表 3.班级表 表用 ...

  10. HDU 2079 选课时间(普通型 数量有限 母函数)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2079 选课时间(题目已修改,注意读题) Time Limit:1000MS     Memory Li ...