0, \0, NULL
字符串、字符数组输入、输出与'\0'的问题 原创首发,欢迎转载! 作者按 字符串、字符数组以"%s"格式输入时,以遇到'空格'为这个字符串输入结束。 字符串、字符数组以"%s"格式输出时,以遇到的第一个'\0'为输出结束标记! C程序设计(谭浩强,第二版,P134) ************************************************************************* 平台为VS2008。 Example1: #include "stdafx.h" #include <conio.h> int _tmain(int argc, _TCHAR* argv[]) { ] = {', 'd', 'e', 'f'}; //没有字符串结束标记\0'' printf("%s", str); getch(); ; } 输出:ab4def 其实紧接着ef后面还有乱码。(原因就是没有'\0',所以没有停止输出)。 ************************************************************************* Example2 #include "stdafx.h" #include <conio.h> int _tmain(int argc, _TCHAR* argv[]) { ] = {'a', 'b', '\0', 'd', '\0', 'f'}; printf("%s", str); getch(); ; } 输出:ab 综合Example1和Example2,说明——字符串、字符数组以"%s"格式输出时,以遇到的第一个'\0'为输出结束标记! 这个规律对puts()同样有效。 补充:"---->0x00---->以"%s"形式输出---->结果就是什么都没有输出 ************************************************************************* Example3 #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { ); scanf("%s", str); printf("%s", str); getch(); ; } 输入:GGGL HF 输出:GGGL ************************************************************************* Example4 #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { ); ); ); scanf("%s%s%s", str0, str1, str2); printf("%s\n%s\n%s\n", str0, str1, str2); getch(); ; } 输入:GG GL HF 输出: GG GL HF 字符串、字符数组以"%s"(使用scanf/sscanf函数时)格式输入时,以遇到'空格'为这个字符串输入结束。 使用gets()函数则不符合这个规律。 ************************************************************************** Example5 #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { ); ); ); scanf("%s_%s_%s", str0, str1, str2); //试图以输入'_'分割 printf("%s\n%s\n%s\n", str0, str1, str2); getch(); ; } 说明:试图以输入'_'分割,结果乱码。不解,待补充! 空字符串(''),0和NULL的关系 应该很多人都还没有认清空字符串('')和NULL的关系吧!!现在我来说明一下吧: 先看一个例子: '' == NULL; '' === NULL; 运行之后会发现第一个为true,第二个为false! 为什么会这样呢?其实在PHP中空字符串和NULL都是以值为0存储的!而==只比较值,所以第一个为true!但是第二个为什么是false呢!? 原因是在PHP中变量是以C语言的结构体来存储的,其中这个结构体有个zend_uchar type;这样的成员变量,他是用来保存变量的类型的,而空字符串的类型是string而NULL的类型是NULL。这一点可以用echo gettype('');和echo gettype(NULL);来打印看看!而===运算符是不单比较值,还有比较类型的,所以第二个为false! 所以可以这样说===是等于下面的函数: [php] function eq($var1, $var2) { if($var1 == $var2 && gettype($var1) == gettype($var2)) { ; } else { ; } } [/php] 所以空字符串(''),NULL和0是值相等而类型不一样! 说得没错!所以变量没有赋值之前绝对不是等于空字符串的!而是NULL! 单引号 或双引号 里面有空格就不是 NULL 了。不家小心就出错。 === 比较类型和值 == 只比较值 字符串遇到整数会转为整型.这个 php官方有 . "并又具有空格的作用" -- 应当叫 “空白”,英文叫 white space. 打出空白的键(或 ASCII 值)有好些个,空格也是其中之一。 空格 是键盘上 那个长条键产生的码, ASCII 值是 0x20. 字符串的终止符 是 null, ASCII 值是 0x00. C++实习题要求去掉字符串末尾的所有空格,一般要求是去掉0x20,就是 ' '。 char str[]="abc 123.. "; int i,L; L = strlen(str); // 得字符串长度 ;i>;i--){ // 从尾巴找起,找到非空白为止 ] != ' ') { str[i] = '\0'; // 处理方法 break; } } 空字符用,还是NULL? 用NULL的代码还挺多的。while (c!=NULL) 这个显然是错的,NULL 只能表示空指针,gcc 都会警告 warning: NULL used in arithmetic 我用 '\0' while (str != NULL && *str != NULL)这么看着怪怪的 NULL 是且仅是空指针,当然是乱用。这里能编译过那里就报 warning 空字符串是"" ,'\0' 仅是一个字符而不是一个串 空字符是\0吧。NULL是空指针。 参考 你必须知道的495个C语言问题
0, \0, NULL的更多相关文章
- Type 'Insus.NET.PictureObject' in Assembly 'App_Code, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.
昨晚想实现一个功能,需要把一个对象存储于ViewState中去,但在运行时,出现下面的异常. Type 'Insus.NET.PictureObject' in Assembly 'App_Code, ...
- System.BadImageFormatException : 未能加载文件或程序集“Medici.PaymentRecover, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。试图加载格式不正确的程序。
System.BadImageFormatException : 未能加载文件或程序集“xxxxx.xxxxx, Version=1.0.0.0, Culture=neutral, PublicKey ...
- PHP中空字符串介绍0、null、empty和false之间的关系
PHP中空字符串介绍0.null.empty和false之间的关系 作者: 字体:[增加 减小] 类型:转载 时间:2012-09-25 用PHP开发那么久,PHP中空字符串.0.null.emp ...
- Javascript 中的false、0、null、undefined和空字符串对象
在Javascript中,我们经常会接触到题目中提到的这5个比较特别的对象——false.0.空字符串.null和undefined.这几个对象很容易用错,因此在使用时必须得小心. 类型检测 我们下来 ...
- 已经导入了具有相同的简单名称“Interop.DSOFramer, Version=1.3.0.0, Culture=neutral, PublicKeyToken=null”的程序集。
错误 : 已经导入了具有相同的简单名称“Interop.DSOFramer, Version=1.3.0.0, Culture=neutral, PublicKeyToken=null”的程序集. ...
- NULL, '\0',0 '0'的区别
如题,在程序中经常遇到NULL,和'\0',常常疑惑它们是什么关系,其实它们的值是一样的,只不过表现的形式不一样: 1.NULL; NULL 即空指针,在C和C++中的形式不一样,msdn上有如下的内 ...
- 未能加载文件或程序集“**, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。试图加载格式不正确的程序。
未能加载文件或程序集“Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项.试图加载格式不正确的程序. 原来, ...
- 输入框中的空"",0,null的判断
改了一个小项目,里面有一个小的问题他们是这样提需求的.两个输入框,第一个输入框里面,输入的内容会对第二个输入框中的内容产生影响.具体是这样的:如果第一个输入框中的值不是“0”,那么第二个输入框就不能填 ...
- 优先选择nullptr而不是0和NULL
我们知道:0是一个int,而不是一个指针.如果C++在一个只有指针才能够使用的上下文中发现它只有一个0,那么它会勉强将0解释成空指针,但那时一种倒退行为.C++的主要方针是0就是一个int,而不是指针 ...
- 未能加载或程序集“XXXX,Version=0.0.0.0,Culter=neutral,PublicKeyToken=null”或它的某一个依赖项。试图加载格式不正确的程序。
问题描述:在VS中运行一个C#程序,出现错误: 未能加载或程序集“XXXX,Version=0.0.0.0,Culter=neutral,PublicKeyToken=null”或它的某一个依赖项.试 ...
随机推荐
- echart 打开新世界的大门
实时折线图 option = { backgroundColor:'#2B2B2B', tooltip: { trigger: 'axis' }, legend: { data:['频率'], tex ...
- WangSql 3.0源码共享(WangSql 1.0重大升级到3.0)
WangSql 1.0博文阅读: http://www.cnblogs.com/deeround/p/6204610.html 基于1.0做了以下重大改动: 1.多数据实现方式调整 2.使用EmitM ...
- 【LOJ】#2032. 「SDOI2016」游戏
题解 看错题了,以为单次修改相当于一个覆盖,后来才明白"添加"-- 就相当于添加很多线段求最小值 首先这个等差数列添加的方式比较烦人,我们拆开两条链,一条s到lca,一条lca到t ...
- ThinkPHP join() table()方法的使用,多表查询
ThinkPHP模型类比较常用的两个方法,table() join() table 1 $list = M()->table('user1 a, user2 b')->where('a. ...
- PhantomJS 远程做调试
做爬虫的工程师,一定会用到phantomjs,这是一个在linux上用的无界面的浏览器 在终端用phantomjs来爬取数据,或者是做测试,怎么去能看到执行到哪一步了,去实时的观测. 其实chrome ...
- 使用gdb调试
启用gdb进行调试二进制程序,必须在二进制程序在采用gcc或g++编译时加入-g参数 启动gdb进行调试的几种形式: 直接启动gdb程序进行调试program程序 gdb program 启动gdb挂 ...
- [ 原创 ] Java基础9--final throw throws finally的区别
final修饰的类不可被继承,final修饰的方法可以被继承但不能被重写(覆盖) final用于可以声明属性和方法,分别表示属性的不可变及方法的不可覆盖.不是方法的不可继承 throw是用来明确地抛出 ...
- BZOJ 2302: [HAOI2011]Problem c [DP 组合计数]
2302: [HAOI2011]Problem c Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 648 Solved: 355[Submit][S ...
- BZOJ.4919.[Lydsy1706月赛]大根堆(线段树合并/启发式合并)
题目链接 考虑树退化为链的情况,就是求一个最长(严格)上升子序列. 对于树,不同子树间是互不影响的.仿照序列上的LIS,对每个点x维护一个状态集合,即合并其子节点后的集合,然后用val[x]替换掉第一 ...
- hihocoder 1866 XOR
题面在这里 拆位分析一下就OK啦 /* y + (y xor x) */ #include<bits/stdc++.h> #define ll long long using namesp ...