一.NULL

NULL是一个宏,它在几个标准头文件中定义,0是一个整型常量,'\0'是一个字符常量,而NUL是一个字符常量的名字。这几个术语都不可互换。

1、NULL用于表示什么也不指向,也就是空指针((void *)0)

2、0可以被用于任何地方,它是表示各种类型零值的符号并且编译器会挑出它

3、'\0'应该只被用于结束字符串

4、NULL没有被定义于C和C++,它不应该被使用除非你自己定义它,像:#define NULL  '\0'。

很多编译系统中的实现是:#define NULL (void*)0

二. 字符串结束符'\0'

1.  字符数组并不要求它的最后一个字符为'\0',甚至可以不包含'\0'。 例如char  c[5]={'a','b','c','d','e'};也是合法的,但是用printf("%s",c),输出数组时会出错。 "%s"格式符对字符串输出时,遇结束符'\0'就停止输出。 而在前面这个字符数组中并没有结束符'\0',所以输完abcde还会继续输出一些未知的东西。 这种情况是能用"%c"输出格式循环输出每个字符。

2.  系统对字符串常量自动加一个'\0',例如: char  str[ ]="liao";和 char * string="liao";   则 sizeof(string)=5,输出到控制台为liao
3.  对于没有指定长度的字符数组,例如char str[ ]={'a','b','c','d','e'},系统不会在最后自动添加结束符'\0', 如果puts(str); 将会输出和abcde和一些未知的东西。 
4.  对于指定了长度的字符数组(初始化字符个数小于字符数组长度),例如char  string[4]={'a','b','c'}; 系统会在最后自动添加结束符'\0'

5. 如果用赋值语句"="对字符数组进行初始化,则只能在定义字符数组的同时进行,不能分成两步进行。 例如: char str1[5]={'a','b','c','d'}; 、 char str1[5]={"liao"};和char str1[5]="liao";是可以的,但是char str1[5];   str1={'a','b','c','d'};  和 char str1[5];  str1="liao";是不可以的。

三. EOF

EOF它是end of file的缩写,表示"文字流"(stream)的结尾。这里的"文字流",可以是文件(file),也可以是标准输入(stdin)。

比如,下面这段代码就表示,如果不是文件结尾,就把文件的内容复制到屏幕上。

  char c;

  while ((c = fgetc(fp)) !=EOF) {

    putchar (c);

}

但是EOF并不是一个特殊字符,而是一个定义在头文件stdio.h中的常量,一般定义为-1。#define  EOF -1  除了表示文件的结尾,EOF还可以表示标准输入的结尾。

char  c;

while((c=getchar())!=EOF){

putchar();

}  但是,标准输入与文件不一样,无法事先知道输入的长度,必须手动输入一个字符,表示到达EOF。Linux中,在新的一行的开头,按下Ctrl-D,就代表EOF(如果在一行的中间按下Ctrl-D,则表示输出"标准输入"的缓存区,所以这时必须按两次Ctrl-D);Windows中,Ctrl-Z表示EOF。(顺便提一句,Linux中按下Ctrl-Z,表示将该进程中断,在后台挂起,用fg命令可以重新切回到前台;按下Ctrl-C表示终止该进程。)

那么,如果真的想输入Ctrl-D怎么办?这时必须先按下Ctrl-V,然后就可以输入Ctrl-D,系统就不会认为这是EOF信号。Ctrl-V表示按"字面含义"解读下一个输入,要是想按"字面含义"输入Ctrl-V,连续输入两次就行了。

C笔记之NULL和字符串结束符'\0'和EOF相关推荐

  1. C语言学习笔记——字符串结束符\0

    C语言中的字符串结束符\0标志着字符串的结束,由编译器自己加上的,ASCII值为0,表示NULL,ASCII中有很多不可见字符由转义字符\和可见字符来标识的,当然可见字符也能用转义字符表示.

  2. 字符拷贝时字符串结束符'\0'很重要

    近期由于memcpy字符串的时候,没有将结束符拷贝进去,导致字符串结尾有乱码,如图: std::ostringstream osg;osg.str("");osg << ...

  3. 学习笔记------关于字符串结束符'\0'、字符串定义方法

    字符串定义方法 有2种方法: 1)字符数组 2)字符指针 初始化 1)字符数组方式初始化大致3种: (1)   char str[10]="12345"或者char str[10] ...

  4. 关于字符串结束符'\0'

    字符串结束符:'\0',其本质就是8位的 0000 0000,而字符类型中并没有这个字符(注意与ASCLL码区别,在ASCLL中000--代表NULL).  所以用0的转意来表示,其意义是字符串的结束 ...

  5. c/c++ 语言中的字符串结束符 '\0'

    字符在内存中的存储是ASCII值存储, '\0' 是 c/c++ 语言中的字符串结束符,在ASCII字符集中对应空字符NULL,数值为0.其作用是识别字符串,简化字符串处理过程.在使用过程中要为其分配 ...

  6. 关于字符串结束符'\0'、字符串定义方法

    字符串定义方法 有2种方法: 1)字符数组 2)字符指针 初始化 1)字符数组方式初始化大致3种: (1)   char str[10]="12345"或者char str[10] ...

  7. C语言中字符串结束符'\0'

    本质 '\0'就是8位的00000000,因为字符类型中并没有对应的这个字符,所以这么写.'\0'就是 字符串结束标志. '\0'是转义字符,意思是告诉编译器,这不是字符0,而是空字符.空字符\0对应 ...

  8. C语言: 字符串结束符 ‘ \0 ’

    1.本质 '\0'是字符串结束标志,不计入串长,但要占内存空间. '\0'是一个ASCII控制字符,是转义字符.意思是告诉编译器,这不是字符0,而是空字符.空字符\0对应的二进制为0000 0000, ...

  9. C语言中的字符串结束符'\0'

    字符串以'\0'结尾,作为对字符串长度识别的标志,'\0'在ASCLL码表中代表NUL,十进制为0. 我写了一个函数,大致功能是将字符串A复制到字符串B中(此时B中为空),返回复制后NUL在B中的地址 ...

最新文章

  1. “我,懂数据,不怕被裁”:这项核心能力到底有多香?
  2. 四大运营商的5G部署路线一览
  3. WINDOWS2003域控制器禁止U盘
  4. tensorflow版本问题导致的错误AttributeError: module ‘tensorflow‘ has no attribute ‘***‘
  5. Linux awk+uniq+sort 统计文件中某字符串出现次数并排序
  6. 数据中心两种常用流量模型运用mininet的实现
  7. Docker小白到实战之开篇概述
  8. leetcode226. 翻转二叉树(dfs)
  9. jwt 私钥_什么是 JSON Web Token(JWT)
  10. 安卓自动滑屏脚本_【按键精灵】开发抖音全自动养号脚本!可实现自动滑屏
  11. 高效集成连接管理与平台运营 中琛物联赋能智慧城市建设
  12. ubuntu 安装 npm、nodejs 各种问题
  13. linux下qt程序以管理员运行,如何让QT程序以管理员权限运行(UAC)
  14. Odoo----的消息系统 - Mail 模块 - Discuss 应用
  15. poi根据模版生成多页word,并压缩下载
  16. 塞尔达传说修改器html,塞尔达传说荒野之息内存修改器修改服装教程
  17. Error: Service is currently being configured by another administrative operation
  18. 银盒子智慧餐厅硬件尺寸规格推荐机型
  19. STM32 定时器编码器模式时,如何理解编码器计数
  20. Android 实现企业微信自动打卡任务同时支持钉钉急速打卡模式

热门文章

  1. 编写一个简单的考试程序,在控制台完成出题、答题的交互。试题(Question)分为单选(SingleChoice)和多选( MultiChoice)两种。
  2. macOS 上好用的字体软件 FontLab VI
  3. Python 求素数之多方法解析
  4. c# 调用post 请求
  5. 浏览器控制台花式打印 typescript全局注入
  6. 教你如何进行FTP服务设置
  7. pdf文档如何修改乱序页面
  8. mybatis-plus @TableLogic 逻辑删除 恢复 自定义方法
  9. 红色警戒!Windows微信蓝屏文件刨析!
  10. IoU、GIoU、DIoU、CIoU