char str1[11] = "12345\06789"; 引发的深刻教训---原来'\067'与'7'是相等的
来源:互联网 发布:只有我知bilibili电影 编辑:程序博客网 时间:2024/05/16 11:17
一直以来, 我总是以为char str1[11] = "12345\06789";和char str2[11] = {'1', '2', '3', '4', '5', '\0', '6', '7', '8', '9', '\0'};是完全等价的。直到今天调试一个程序, 我才发现, 他们原来是不等价的, 我被这个问题蒙在鼓里, 看来有必要深入看看。
我一直苦苦思索原来程序产生的异常, 一直找不到原因, 我想, 如果实在是异常, 那就是str1和str2不等价, 而自以为深厚的C语言功底告诉我: str1和str2是绝对等价的。不过, 最后种种迹象都表明,str1和str2不等价。 于是, 我不得不怀疑str1和str2的等价性, 且看程序:
#include <stdio.h>int main(){char str1[11] = "12345\06789";printf("%s\n", str1); // 居然是12345789int i = 0;for(i = 0; i < 11; i++){printf("%d\n", str1[i] - '0');}char str2[11] = {'1', '2', '3', '4', '5', '\0', '6', '7', '8', '9', '\0'};printf("%s\n", str2); // 12345for(i = 0; i < 11; i++){printf("%d\n", str2[i] - '0');}return 0;}原来, str1和str2确实不等价。 为什么呢? 查资料才知道‘\067’是一个字符, 它的ascii值是8进制的67, 也就是55. 而55对应的就是字符'7', 原来'\067'是'7'才是相等的啊, 难怪有上面程序的结果.
好了, 终于找到了问题的本质原因了。 看来, 程序猿不能盲目自信啊, 大胆假设, 小心求证。 敢于怀疑看似正常的东西。 最后以一个小程序结尾本文:
#include <stdio.h>int main(){if('\067' == '7'){printf("yes\n"); // yes}else{printf("no\n");}printf("%d\n", '\012'); // 10printf("%d\n", '\034'); // 28return 0;}
0 0
- char str1[11] = "12345\06789"; 引发的深刻教训---原来'\067'与'7'是相等的
- 第一次深刻的教训
- const char* str1="abcd"与char* str2="abcd"的区别
- 这次的教训是深刻的--关于使用GetFiles()删除文件的后果!
- 学习内核移植的深刻教训
- 9.18事变中国的深刻历史教训
- C++ string 使用的深刻教训
- char str1[]="abc";char str2[]="abc";str1与str2不相等,为什么
- char str1[]="abc"; char str2[]="abc";str1与str2不相等,为什么
- char str1[]="abc"; char str2[]="abc";str1与str2不相等,为什么
- strstr(char *str1, const char *str2)的应用
- 7.1.7 char str1[]="abc"和char str2[]="abc";str1和str2不相等
- String str1 = new String("abc")与 String str1 = "abc" 的区别
- 一次血泪教训引发的构思
- char* p="test"引发的血案
- 原来是malloc与calloc的问题
- 教训深刻的Maudio delta66的rom以及资料!!
- 一个愚蠢的错误,一次深刻的教训
- 静态、动态内存分配比较
- 怎样向一个外行人解释操作系统内核?+一篇有关将黑客帝国比作操作系统的旧文
- Unity3D游戏开发之换装方法
- 二、修改表、字段属性设置、索引设置、约束设置
- 二分法求多项式单根【数据结构测试3.1】
- char str1[11] = "12345\06789"; 引发的深刻教训---原来'\067'与'7'是相等的
- OpenCV系统学习(基本了解完)
- 深入了解Windows句柄到底是什么
- POJ 1002 487-3279
- 自己编写脚本启动hadoop各个守护进程需要的特别配置
- Sphere - AABB Collision Detaction
- 工业互联网不是什么?
- erlang send剖析及参数意义
- 回顾框架搭建问题总结