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”或它的某一个依赖项.试 ...
随机推荐
- Codeforces Round #213 (Div. 1) B - Free Market 思维+背包 好题
B - Free Market 思路:这个题怎么说呢,迷惑性很大,题目里说了交换了两个集合的时候如果有相同元素不能交换,感觉如果没 这句话能很快写出来, 其实当交换的两个集合有重复元素的时候只要交换那 ...
- python3与mysql交互:pymysql
python3与mysql交互 1.安装pymysql模块 pip3 install pymysql3 2.pymysql的简单使用: # /usr/bin/env python3 import py ...
- Gitlab Issue Tracker and Wiki(一)
本节内容: 创建第一个问题 创建第一个合并请求 接受合并请求 工作里程碑 在提交中引用问题 创建维基百科页 使用Gollum管理维基百科 一. 创建问题 1. 登陆Gitlab服务器 2. 切换到想要 ...
- PHP开发命名规范
命名规范 ThinkPHP5遵循PSR-2命名规范和PSR-4自动加载规范,并且注意如下规范: 目录和文件 目录使用小写+下划线: 类库.函数文件统一以.php为后缀: 类的文件名均以命名空间定义,并 ...
- Hadoop CapacitySchedule配置
下面是Hadoop中CapacitySchedule配置,包含了新建队列和子队列 <configuration> <property> <name>yarn.sch ...
- 一个将PDF转word、图片、PPT的在线工具
smallpdf 真的超级棒! https://smallpdf.com/cn
- React Native踩坑之The SDK directory 'xxxxx' does not exist
相信和我一样,自己摸索配置环境的过程中,第一次配,很可能就遇到了这个比较简单地错误,没有配置sdk环境 解决办法 在电脑,系统环境变量中,添加一个sdk的环境变量 uploading-image-95 ...
- 洛谷——P2936 [USACO09JAN]全流Total Flow
题目描述 Farmer John always wants his cows to have enough water and thus has made a map of the N (1 < ...
- JQuery的源码阅读
探索原理,animation实现,一个对象可以同时绑定多个事件,这是如何实现的? (function(window, undefined) { function jQuery(selector){ r ...
- Python处理海量数据的实战研究
最近看了July的一些关于Java处理海量数据的问题研究,深有感触,链接:http://blog.csdn.net/v_july_v/article/details/6685962 感谢July ^_ ...