本人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. AutoHotkey批量L版代码转H2的vim脚本

    原脚本尽量用表达式的语法写,错误会比较少,比如"If a=", "fun(a=1)"这种语法在V2会出错文件放vim的autoload目录下,可使用以下map使 ...

  2. July 18th 2017 Week 29th Tuesday

    My heart is stronger now that you are in it. 我的心里有了你,从此变得更强大. You will no longer feel lonely if ther ...

  3. OC基础数据类型-NSNumber

    1.NSNumber:专门用来装基础类型的对象,把整型.单精度.双精度.字符型等基础类型存储为对象 //基本数据类型 //专门用来装基础类型的对象 NSNumber * intNumber = [[N ...

  4. 理解JavaScript中的去抖函数

    何为去抖函数?在学习JavaScript去抖函数之前我们需要先弄明白这个概念.很多人都会把去抖跟节流两个概念弄混,但是这两个概念其实是很好理解的. 去抖函数(Debounce Function),是一 ...

  5. PhoneGap API 之多媒体

    一. MediaApi 简单介绍 PhoneGap API Media 对象提供录制和回放设备上的音频文件的能力 参数: var media = new Media(src, mediaSuccess ...

  6. phonegap的照相机 API

    一. Camera Api 简单介绍 Camera 选择使用摄像头拍照,或从设备相册中获取一张照片.图片以 base64 编码的 字符串或图片 URI 形式返回. 方法: 1. camera.getP ...

  7. geos学习笔记:安装和使用

    1.首先在https://trac.osgeo.org/geos下载geos-3.6.2.tar.bz2 解压后 cd geos- ./configue //或选择安装的目录./configure - ...

  8. Windows环境下ELK简单搭建记录

    前言 ELK已经是一套成熟的日志解决方案,虽然出现了好久,今日才终于研究了一下,不过是在windows平台上安装的. 搭建步骤 下载软件 安装软件 修改配置文件 启动软件 集成测试 下载软件 首先从官 ...

  9. Ajax跨域问题及解决方案

    目录 复现Ajax跨域问题 Ajax跨域介绍 Ajax跨域解决方案 一. 在服务端添加响应头Access-Control-Allow-Origin 二. 使用JSONP解决 小结 复现Ajax跨域问题 ...

  10. CToolBarCtrl工具栏设置总结(转)

    (一)工具条控制的主要功能 所谓工具条就是具有位图和分隔符组成的一组命令按钮,位图按钮部分可以是下推按钮.检查盒按钮.无线按 钮等.工具条对象类派生于主窗口架框类CframeWnd或CMDIFrame ...