你搞清楚「NULL」、「0」、「'0'」、「"0"」「\0」了吗?
嵌入式Linux
共 302字,需浏览 1分钟
· 2020-11-28
我们先讨论NULL,平时使用指针的时候,会经常遇见这个家伙,这个家伙的值是是这样定义的
#define NULL 0
或者
#define NULL (void *)0
我们看一下下面这段代码
#include
int main () {
size_t ii;
int *ptr = NULL;
unsigned long *null_value = (unsigned long *)&ptr;
if (NULL == 0) {
printf ("NULL == 0\n"); }
printf ("NULL = 0x");
for (ii = 0; ii < sizeof (ptr); ii++) {
printf ("%02X", null_value[ii]); }
printf ("\n");
return 0;
}
程序输出
NULL == 0
NULL = 0x000061FE08000400B1138000
--------------------------------
Process exited after 0.02921 seconds with return value 0
请按任意键继续. . .
我们用 &ptr
获取 ptr
的地址,然后用 unsigned long *
把这个地址转换成 unsigned long *
类型,之后再用 *
钥匙来打开这个地址,获取这个地址的值。只不过这里不是用 *
获取,用的是数组偏移。
我们修改下代码
#include
int main () {
size_t ii;
int *ptr = NULL;
unsigned long *null_value = (unsigned long *)&ptr;
if (NULL == 0) {
printf ("NULL == 0\n"); }
printf ("NULL = 0x");
for (ii = 0; ii < sizeof (ptr); ii++) {
printf ("%02X", null_value[ii]); }
printf ("\n");
printf("0x%p 0x%p\n",ptr,&ptr);
return 0;
}
程序输出
NULL == 0
NULL = 0x000061FE08000400A7138000
0x0000000000000000 0x000000000061FE08
--------------------------------
Process exited after 0.03177 seconds with return value 0
请按任意键继续. . .
这样看之后,就觉得没有那么拗口了吧。
我们再讨论下 「'0'」
字符 0 和其他都不能混为一谈,它是一个字符,字符对应的是ascii 码
#include
int main () {
char c = '0';
printf("'%c' 0x%x %d\n",c,c,c);
return 0;
}
程序输出
'0' 0x30 48
--------------------------------
Process exited after 0.02841 seconds with return value 0
请按任意键继续. . .
「"0"」是一个字符串,字符串跟字符的不同是,字符串在最后面有一个字符结束标识 nul
。
测试程序
#include
#include
int main () {
char * str = "0";
int len = strlen(str);
printf("%d\n",len);
for(int i = 0;i< len +1;i++)
printf("[0x%x]",str[i]);
return 0;
}
程序输出
1
[0x30][0x0]
--------------------------------
Process exited after 0.02936 seconds with return value 0
请按任意键继续. . .
「\0」这个就有点意思了,这个其实也就是数值 0
。
测试程序
#include
#include
int main () {
char c = '\0';
printf("'%c' 0x%x %d\n",c,c,c);
return 0;
}
程序输出
' ' 0x0 0
--------------------------------
Process exited after 0.03893 seconds with return value 0
请按任意键继续. . .
好了,就这些,看了这些之后,就再也不用担心如果一个字符串里面有 0
字符不知道怎么做算法比较了吧。
嵌入式Linux微信扫描二维码,关注我的公众号
评论
【第129期】程序员的新宠:三款终端工具,让你告别Xshell!
概述 WindTerm:跨平台的SSH利器 首先介绍的是WindTerm,这是一款使用C语言开发的跨平台SSH客户端。它不仅完全免费,而且没有商业使用的限制。WindTerm支持SSH v2、Telnet、Raw Tcp等协议,而且性能出色,甚至超过了FinalShell和Electerm。功能
前端微服务
0
你只是卡住了,你并没有被击垮
一旦思维僵化了,那就很难跟上这个真实世界的快节奏,更不可能自发地去发现自身问题,进而打破自己。思维僵化,会导致我们无法“活在当下,开放和接纳,并去做自己觉得重要的事情”。觉察自己思维僵化的特征,是改变的第一步。思维僵化导致了你的选择都是错误的。思维方式的不同,才是人跟人之间的不同。有的人遇到挫折了,
小Q聊产品
1
【比特币减半后价格表现大揭秘】历史数据告诉你什么?
加密货币现状的十张图表Glassnode 和 Coinbase 发布了《加密货币市场指南》,这是一个季度系列,旨在提供对加密货币市场主要发展的详细分析。以下是报告中引起我们注意的10张图表:1.比特币主导地位从50%上升至52%通常由减半引发的山寨季会降低比特币的主导地位,使其更倾向于新的山寨币。这
区块链头条
0
朋友,你也不想一个人孤孤单单的上班吧?
上班的时候,有一群摸鱼搭子非常重要!一到上班时间,他们就从四面八方涌进群里冒泡...从八卦聊到股市、从职场聊到乌X兰局势,偶尔还会复读、相亲、battle...然后,下午6点钟准时消失不见...所以你要不要加入我们一起摸鱼?我们有北京、上海、深圳、广州、杭州、武汉、成都、南京等8个城市的摸鱼群,还有
产品经理日记
0
你真的理解 devDependencies 和 dependencies 的区别吗?
点击上方 前端Q,关注公众号回复加群,加入前端Q技术交流群作者:井柏然原文:https://juejin.cn/post/7135795969370619918你是否真的理解 devDependencies 和 dependencies 的区别?如果不能确切的回答、理解还停留在模糊的阶段,
前端Q
0
为啥大模型还没完全取代你?
点击下方“JavaEdge”,选择“设为星标”第一时间关注技术干货!免责声明~任何文章不要过度深思!万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案」;不要急着评判文章列出的观点,只需代入其中,适度审视一番自己即可,能「跳脱出来从外人的角度看看现
JavaEdge
0