鱼C论坛

 找回密码
 立即注册
查看: 3933|回复: 36

[已解决]关于0,'0','\0'的问题

[复制链接]
发表于 2022-5-12 20:35:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
有人可以 给我解释一下关于这个
char s[]={"012xy"};
这个字符串的0代表的十进制是48 还是 0?
为什么呢?


参考代码:

#include <stdio.h>
#include <string.h>
int main()
{
        int count=0;
        char s[]={"012xy"};
        printf("%d",*s);

        #if(1)
        for(int i=0;s[i]!=0;i++)
        {
                if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z'))       
                {
                        count++;
                }
        }               
        #endif

        printf("%d",count);
}
最佳答案
2022-5-13 20:02:18
tyf1218405122 发表于 2022-5-12 21:04
#include
#include
int main()

0、'0'、和 '\0' 的分别:

0 就是数字零,与其余两个不同,不要怀疑,这是我们小时候就开始学习的零。一共有 10 个数字,分别是 0、1、2、3、.....、9

以下两种都是字符,只是编码不同而已。
'0' 是字符,编码是 48,一共有 128 个字符,这里就是俗称的 ASCII 编码。虽说有 128 个 但真正能打印的只有 95 个字符(也就是你键盘上看到的所有字符,你可以自己数数看),如果是 EASCII 则是 256 个字符(但这不重要)。
'\0' 是空字符,如上,编码是 0,也写作 NUL,也是 128 个 ASCII 编码之一,属於控制符,不能打印。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-12 20:46:07 | 显示全部楼层
%d读48, %c读是0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-12 20:56:47 | 显示全部楼层
本帖最后由 tyf1218405122 于 2022-5-12 20:58 编辑


我先自己理一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-12 21:04:47 | 显示全部楼层

#include <stdio.h>
#include <string.h>
int main()
{
        int count=0,i=0;
        char s[]={"012xy"};
       // printf("%d",*s);

        #if(1)
        for(i=0;*(s+i)!=0;i++)
        {
                if((*(s+i)>='a'&&*(s+i)<='z')||(*(s+i)>='A'&&*(s+i)<='Z'))      
                {
                        count++;
                }
        }               
        #endif

        printf("%d",count);
}
从上面的代码运行结果看;
字符串s中的0   和我下面的那个for循环中判断条件的0是不同的;
那么意思就是说在判断的时候取得字符串s中0那个值是48,不是0;
为什么取得是48 而不是 0呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-12 21:51:21 | 显示全部楼层
tyf1218405122 发表于 2022-5-12 21:04
#include
#include
int main()

字符和数字能分清不?
0 '0' 你怎么看?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-13 10:45:54 | 显示全部楼层
学习到了,加油。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-13 12:30:41 | 显示全部楼层
学习了,加油!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-13 12:32:18 | 显示全部楼层
10%,有点低啊,中一个吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-13 18:05:02 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-13 20:02:18 | 显示全部楼层    本楼为最佳答案   
tyf1218405122 发表于 2022-5-12 21:04
#include
#include
int main()

0、'0'、和 '\0' 的分别:

0 就是数字零,与其余两个不同,不要怀疑,这是我们小时候就开始学习的零。一共有 10 个数字,分别是 0、1、2、3、.....、9

以下两种都是字符,只是编码不同而已。
'0' 是字符,编码是 48,一共有 128 个字符,这里就是俗称的 ASCII 编码。虽说有 128 个 但真正能打印的只有 95 个字符(也就是你键盘上看到的所有字符,你可以自己数数看),如果是 EASCII 则是 256 个字符(但这不重要)。
'\0' 是空字符,如上,编码是 0,也写作 NUL,也是 128 个 ASCII 编码之一,属於控制符,不能打印。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-5-13 20:29:04 | 显示全部楼层
下次用下代码块发代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-13 21:35:16 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-14 00:18:06 | 显示全部楼层
666666666666666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-14 08:07:51 | 显示全部楼层
本帖最后由 胡尔汉 于 2022-5-14 09:19 编辑

printf(“%d”,*s);
打印的是数组s第一个字符的十进制数据
因为计算机内部是通过二进制的形式来存储各种数据,为了能通过0和1来表示各种字符,C使用ascii码来表示字符,比如01100001表示字符'a',比如字符'0'的ascii码是00110000,这串二进制换算成十进制后是48,所以打印出来是48,如果写成%c的话,打印的就是字符'0'
int x=48;
char y='0';
printf("%c",x);
if(x==y)
        printf("True");
else
        printf("False");
换句话说,上面七行定义了一个整形变量x,值是48,和一个字符变量y,值是'0',但是printf函数里我告诉计算机用字符的形式打印变量x,最后出来的结果实际上是字符'0',甚至判断两个不同类型的变量x是否等于y,也能打印出True的结果,也就是整形48和字符'0'在计算机中的数据是一样的,最后8位二进制都是00110000,只不过两个数据类型的字节长度不同罢了

由于s数组储存的是字符串,这个字符串会在最后添加'\0'来表示字符串已经结束,所以s实际上是"012xy\0",for循环里的s[ i]!=0判断的是s[ i]的数据是不是ascii码里二进制00000000对应的字符,也就是'\0',所以会在字符串s[5]退出循环而不是在s[0]的时候就退出,如果写成s[ i]!='0'就是在s[0]就退出,最后print一下变量i就知道了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-14 12:23:25 | 显示全部楼层
在这个字符串  "012xy"   中  这个 0 是以ASCII码存储 你以%d读取 获取到的就是ASCII码值 ,以%c读取获取到的就是字符 'c'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-14 12:48:15 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-14 13:27:15 | 显示全部楼层
0,代表数字,int型
‘0‘,代表字符,char型
’\0‘,可以代表转义字符,一般用在字符串中最后一位,代表该字符串的结束字符
代码中的0,首先看类型,是char型,那就是ASCLL码的,即ASCLL码的编号48
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-14 14:31:43 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-14 23:05:43 | 显示全部楼层
数字0,字符‘0’,空字符'\0'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-15 01:51:24 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-30 03:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表