关于C里面 数字0,字符'0',字符串"0",字符串结尾标志符'\0'
2014-12-02 16:34
239 查看
首先对于字符,C语言里主要区分的依据是ascii编码表:
在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)、以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。
以上百度百科ASCII http://baike.baidu.com/view/15482.htm
需要明白的是,这里的映射关系式“字符” <-->"数字(编码)",
字符‘0’:
在这个表中,字符零,也就是C中的 ‘0’ 对应的是48,即,字符零在计算机中的存储是48。也就是说以下代码执行结果是48
char czero = '0';
printf("czero = %d\n", czero);
执行结果: czero = 48
数字0:
数字类型的数据在计算机中存储即是本身,就是0,看这段代码
int izero = 0;
if (izero == czero)
{
printf("czero = izero\n");
}
else
{
printf("czero != izero\n");
}
执行结果: czero != izero
字符串“0”:
字符串“0”,很好理解,相当于存了两个符号,一个是字符‘0’,一个是字符串结尾标志‘\0’,其实存储的十进制数就是数字0
字符串结尾标志‘\0’:
虽然,大家都是这么说的,但其实,这里'\0',中的反斜线 \ 可以当做转义符,其实就是转义符,跟 \\ 表示 \,\' 表示 ' 一样,\0 表示的就是 0,但是别忘记了这里的 \0 是字符类型的,相当于裸0(我自己想的名字==),也就是数字0,数字0对应着哪个字符呢,查看下ASCII表格,发现第一个就是,NULL,这样也好理解了,在读取字符串的时候,末尾是NULL,但是必须有这个NULL,才能告诉编译器字符串结束了。
嗯,就是这样,另外多说一些:
对于memset,
memset(*dst, 0, size) 和 memset(*dst, '\0', size)效果是一样的,但是和memset(*dst, '0', size)不一样。
查看memset的定义:
oid *memset(void *s, int ch, size_t n);
函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。
好吧,还是来自百度百科http://baike.baidu.com/view/982208.htm
第二个本来就是数字啊,数字 0 和 字符'\0' 换成十进制数字都是0,但是字符'0'换算成数字是48,这也就可以理解了。要不做个试验:
char szName[10];
memset(szName,50, 10)
printf("szName = %s", szName);
这段代码的输出是,一串的222222222222222222222222222,不止10个,
一、输出2是因为,ASCII值50,对应的字符是2
二、输出多余10个2,是因为我们把字符串结尾标志也memset掉了。
嗯,虽然memset一般是用来初始化的,这时,直接用memset(*dst, 0, size)就行。
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(10) | 评论(0) | 转发(0) |
0
上一篇: const char*, char const*, char*const的区别
下一篇:进程之间不能传递指针。。
相关热门文章
linux shell 字符串操作(长度...
shell 字符串为空和长度的判断...
关于C语言中的#的用法...
教你如何辨别化妆品真假...
字符串发送与十六进制发送的区...
test123
编写安全代码——小心有符号数...
使用openssl api进行加密解密...
一段自己打印自己的c程序...
sql relay的c++接口
如何提高中文域名网站权重呢?...
windows有发展前景吗
谁能够帮我解决LINUX 2.6 10...
现在的博客积分不会更新了吗?...
shell怎么读取网页内容...
给主人留下些什么吧!~~
评论热议
在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)、以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。
以上百度百科ASCII http://baike.baidu.com/view/15482.htm
需要明白的是,这里的映射关系式“字符” <-->"数字(编码)",
字符‘0’:
在这个表中,字符零,也就是C中的 ‘0’ 对应的是48,即,字符零在计算机中的存储是48。也就是说以下代码执行结果是48
char czero = '0';
printf("czero = %d\n", czero);
执行结果: czero = 48
数字0:
数字类型的数据在计算机中存储即是本身,就是0,看这段代码
int izero = 0;
if (izero == czero)
{
printf("czero = izero\n");
}
else
{
printf("czero != izero\n");
}
执行结果: czero != izero
字符串“0”:
字符串“0”,很好理解,相当于存了两个符号,一个是字符‘0’,一个是字符串结尾标志‘\0’,其实存储的十进制数就是数字0
字符串结尾标志‘\0’:
虽然,大家都是这么说的,但其实,这里'\0',中的反斜线 \ 可以当做转义符,其实就是转义符,跟 \\ 表示 \,\' 表示 ' 一样,\0 表示的就是 0,但是别忘记了这里的 \0 是字符类型的,相当于裸0(我自己想的名字==),也就是数字0,数字0对应着哪个字符呢,查看下ASCII表格,发现第一个就是,NULL,这样也好理解了,在读取字符串的时候,末尾是NULL,但是必须有这个NULL,才能告诉编译器字符串结束了。
嗯,就是这样,另外多说一些:
对于memset,
memset(*dst, 0, size) 和 memset(*dst, '\0', size)效果是一样的,但是和memset(*dst, '0', size)不一样。
查看memset的定义:
oid *memset(void *s, int ch, size_t n);
函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。
好吧,还是来自百度百科http://baike.baidu.com/view/982208.htm
第二个本来就是数字啊,数字 0 和 字符'\0' 换成十进制数字都是0,但是字符'0'换算成数字是48,这也就可以理解了。要不做个试验:
char szName[10];
memset(szName,50, 10)
printf("szName = %s", szName);
这段代码的输出是,一串的222222222222222222222222222,不止10个,
一、输出2是因为,ASCII值50,对应的字符是2
二、输出多余10个2,是因为我们把字符串结尾标志也memset掉了。
嗯,虽然memset一般是用来初始化的,这时,直接用memset(*dst, 0, size)就行。
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(10) | 评论(0) | 转发(0) |
0
上一篇: const char*, char const*, char*const的区别
下一篇:进程之间不能传递指针。。
相关热门文章
linux shell 字符串操作(长度...
shell 字符串为空和长度的判断...
关于C语言中的#的用法...
教你如何辨别化妆品真假...
字符串发送与十六进制发送的区...
test123
编写安全代码——小心有符号数...
使用openssl api进行加密解密...
一段自己打印自己的c程序...
sql relay的c++接口
如何提高中文域名网站权重呢?...
windows有发展前景吗
谁能够帮我解决LINUX 2.6 10...
现在的博客积分不会更新了吗?...
shell怎么读取网页内容...
给主人留下些什么吧!~~
评论热议
相关文章推荐
- 关于C里面 数字0 ,字符‘0’ ,字符串“0”,字符串结尾标示符‘\0’
- @V@ java代码笔记2010-06-12:java控制台输入各类型类实现;以及判断输入字符串里面是否有数字的两种方法:方法1:转换成字符数组;方法2:正则表达式。
- 给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后。 要求:空间复杂度是O(1),且只能遍历一次字符串。
- 如何去掉数字字符串里面的特殊字符
- 写一函数,输入一个四位数字,要求输出这四个数字字符,但每两个数字间空格。如输入1990,应输出"1 9 9 0"。
- 写一函数,输入一个四位数字,要求输出这四个数字字符,但每两个数字间空格。如输入1990,应输出"1 9 9 0"。
- string变量字符串的结束标志是什么,我看书上好像和c不一样,c的char *是以"\0"结束但c++好像不是
- 关于字符串中数字字符转化为数字 sscanf的使用以及strchr的使用
- 统计字符串里面数字,字母,其他字符的出现次数
- python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字
- mybatis 里面使用<if test=""> 判断,当后台传的值是数字字符串时,怎么处理
- 编程实现:从字符中获取连续数组序列,如字符串"a1dl2iad9j3la5kudp7u9pn4blj8ap5u3e6ml9a"中可以得到的连续数字序列为1234556.【注】:只考虑一位,因此最长的数
- c - 统计字符串"字母,空格,数字,其他字符"的个数和行数.
- 关于字符串中数字字符转化为数字 sscanf的使用以及strchr的使用
- js里面关于数字 字符串 数组 的问题
- 关于"密码最短长度为7,其中必须包含以下非字母数字字符: 1”的问题
- 金山笔试题-字符串排序 :" 写一个函数,实现对给定的字符串(字符串里面包括:英文字母,数字,符号)的处理"
- 关于计算一个字符串中的,数字,字母,空格,其他字符个数说说明
- 一个关于取字符串中数字和字符的逻辑问题
- 算法:输入一个字符串,判断里面的数字,英文字符,空格和其他字符的个数