C语言中的‘\0’、0、‘0’和NULL辨析
C语言学习笔记(1)
文章目录
- C语言学习笔记(1)
- 前言
- 一、\0是什么?
- 二、与NULL、‘0’、0的区别
- 1.与NULL的区别
- 2.与‘0’和0的区别
- 总结
前言
本文记录在学习过程中,遇到的关于‘\0’的一些问题。
一、\0是什么?
\0是C语言中用于标识字符数组结尾的特殊字符,\0在字符数组中和普通字符一样会占据一个字符的存储空间。
int main(){char str[] = "hello";int len = sizeof(str); //结果为6
}
\0在ASCII码表中的信息如下:
二、与NULL、‘0’、0的区别
1.与NULL的区别
在C语言中,NULL一般指空指针,表示不指向任何东西。其定义如下:
#undef NULL
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif
可以看到,NULL底层就是整型0,底层表示为00000000。所以可以说,NULL和‘\0’以及整数0是同样的底层01码在不同使用场景的解读,两者在一些场景可以直接互换,如下所示,但是不建议这么做:
char str[] = "hello world";
char* index = str;
index += 5;
*index = NULL;char* inter = '\0';
char ch = NULL;
2.与‘0’和0的区别
首先,字符‘0’在ASCII的信息如下:
其十进制的大小是48,这里就可以引出一个重要的差异,即在if,while等判断语句下,\0不能通过判断,而‘0’是可以的。
代码如下(示例):
int a = 0;char b = '0';char c = '\0';char* d = NULL;if (a)printf("a is TRUE\n");if (b)printf("b is TRUE\n");if (c)printf("c is TRUE\n");if (d)printf("d is TRUE\n");
这段代码中只有b可以通过判断。究其原因,在C语言中,因为没有布尔类型,而是使用整型来进行判断,我们知道计算机所有的字符底层都是01,解读方式的不同带来了不同的含义,如00110000解读为字符为‘0’,解读为整数就是48,所以C语言中只有00000000为假,其余所有均为真,而00000000可以解读为整数0和字符‘\0’,所以在判断时为假。
利用这一点可以进行一些字符串操作时简化代码,如下:
#从字符串中查找第一个子串并删除
char *match(char *str,char *want)
{while(*want != '\0')if(*str++ != *want++)return NULL;return str;
}int del_substr(char *str,char const *substr)
{char *next;while(*str != '\0'){next = match(str,substr);if(next != '\0')break;str++;}if(*str == '\0')return 0;//利用赋值表达式的值为左操作数的新值和'\0’判断为假来完成主串中子串的删除。while(*str++ = *next++);return 1;
}
总结
看似简单的‘\0’,往下深究也能学到很多,在学习中要有这种刨根问题的精神。以此自勉。
C语言中的‘\0’、0、‘0’和NULL辨析相关推荐
- n%i==0在c语言作用,在C语言中,if(n%i==0,)是什么意思?n和i分别为一个数、 , c语言中 if(n%i==0) break 什么意思...
导航:网站首页 > 在C语言中,if(n%i==0,)是什么意思?n和i分别为一个数. , c语言中 if(n%i==0) break 什么意思 在C语言中,if(n%i==0,)是什么意思?n ...
- C语言中while判断为0,在C语言中,为了结束由do-while语句构成的循环, while后一对圆括号中表达式的值应该能够为0()...
品和标它列效指的所出企服务业产有绩,中为值这两个维度是,每个行打客对指标个维的两度进让顾分绩效,偏于图模型是型定性的诊断模一种研究四分. 票价团体另行在()公格.语言e语对圆括格及的价价格示门收费收费 ...
- c+语言+null,C/C++语言中NULL、'\0’和0的区别
NULL.'\0'和0的值是一样的,都是0,不过它们的表现形式不一样: 1. NULL: 即空指针,不过在C和C++中并不一样.在VS 2013的库文件string.h中可以看到如果定义. 1 /* ...
- c语言中 static int,c语言中static unsigned int n=0;是什么意思?请大师指点迷津,学生有礼了。...
c语言中static unsigned int n=0;是什么意思?请大师指点迷津,学生有礼了.以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我 ...
- c语言char数组和short数组的区别,详解C语言中Char型指针数组与字符数组的区别
详解C语言中Char型指针数组与字符数组的区别 详解C语言中Char型指针数组与字符数组的区别 1.char 类型的指针数组:每个元素都指向一个字符串,指向可以改变 char *name[3] = { ...
- C语言中的bool变量
在一些高级语言当中,为了能够完成更好的逻辑判断,因此就有了bool类型,bool类型的变量值只有true和false两种. 而在C语言中,一般认为0为假,非0为真. 这是因为c99之前,c90是没有b ...
- python为什么从0开始_为什么大多数编程语言中,索引都是从0开始
为什么大多数编程语言中,索引都是从0开始 世界上绝大多数语言,但凡涉及到了索引这个概念,索引都是从0开始的,对于初学者,难免觉得别扭,毕竟生活中,但凡涉及到和顺序有关的概念,都是从1开始的,那么为什么 ...
- C语言中的static 详细分析 2014-10-11 15:15 143人阅读 评论(0) 收藏...
转自:http://blog.csdn.net/keyeagle/article/details/6708077 看到这篇文章针对C语言的static关键字解释的比较好,这里转载过来.谢谢原作者分享. ...
- c语言中 调用函数除函数名外,【单选题】在 C 语言中 , 调用函数除函数名外 , 还必须有 ( ). (10.0分)
A. 函数预说明 B. 实际参数 C. ( ) D. 函数返回值...
[单选题]在 C 语言中 , 调用函数除函数名外 , 还必须有 ( ). (10.0分) A. 函数预说明 B. 实际参数 C. ( ) D. 函数返回值 更多相关问题 下列关于IMOECDIS性能标 ...
- c语言中转义字符 0,【填空题】在C语言中,用“\\”开头的字符序列称为转义字符, 转义字符‘\\n’的功能是_____; 转义字符‘\\0’的功能是_____;...
[填空题]在C语言中,用"\\"开头的字符序列称为转义字符, 转义字符'\\n'的功能是_____; 转义字符'\\0'的功能是_____; 更多相关问题 在MGB1420万能磨床 ...
最新文章
- 启用vsftpd服务
- ShopEx 手动使用分类做导航时,获取当前导航的焦点状态
- Huffman编码(Huffman树)
- C++中类和对象的一些注意事项
- Linux网络协议栈:一个TCP链接的耗时
- 默认conf指向位置
- 个位数不含4用计算机表示,计算机组成原理
- Mysql binlog入门
- 通用窗口类 Inventory Pro 2.1.2 Demo1(上)
- 新广告法违规词、敏感词在线检测工具
- CSS背景图片代码示例
- 软考高级信息系统项目管理师经验分享
- 百度地图点聚合解决方案
- 一些名片上最常用的中英文称呼:
- 有趣好玩的带音乐24H全自动在线要饭系统源码
- 引导图(TapTargetView)
- uniapp跳转第三方地图导航
- RNDIS设备开发手记
- 基于vlc-Qt的视频播放器(支持添加视频列表、单曲循环等)
- 转载:改“条件导向法”为“目标倒推法”
热门文章
- UML设计中的9中图例(简单版)
- 二叉树中前序 中序 后序的互推
- 西南石油大学计算机专业复试经验,西南石油大学
- 什么是事务? 事务的隔离级别和事务运行的模式分别是什么?spring 事务和分布式事务实现方式有哪些?
- jquery ajax request payload,post请求 request payload问题
- WAIC 2021 | 共话AI开源开放之道,赢取惊喜好礼!
- linux read phy reg,PHY
- makefile进入子文件夹执行make
- 华创期货:止损还是抗单决定亏损还是盈利
- 基于Python实现的CTF Crypto加密解密工具