前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言中‘\0’和EOF的区别

C语言中‘\0’和EOF的区别

作者头像
黎鹤舞
发布2024-03-19 15:10:10
1730
发布2024-03-19 15:10:10
举报
文章被收录于专栏:黎鹤舞的编程技术栏

前提知识

‘\0’和EOF都是在C语言的字符串中出现的,想要了解这两位的区分我们首先就得了解C语言中字符串的定义。

字符串的定义

在C语言中没有严格的标准定义字符串,即在C语言中没有字符串这一变量类型。 C语言中字符串的存储通常是以字符数组的形式来进行的。 以字符串“hello world !”为例,其存储方式如下图所示:

可以看到字符串就是开辟了一串连续的字符变量内存,按照一定的顺序进行存储,并且在字符串的末尾加上空字符’\0’‘’。

空字符’\0’和EOF的区别:

空字符’\0’

首先’\0’是一个转义字符,它的意思是告诉编译器,我并不是字符0,而是空字符。

作用

strlen()函数就是通过计算字符串在’\0’之前的个数,如果遇到’\0’就结束,我们在用sizeof()函数的时候,通常比strlen()函数计算得到的值多1,这就是因为sizeof()函数统计了’\0’的信息,代码如下:

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

int main()
{
    char str[] = "hello bit";
    printf("%d %d\n", sizeof(str), strlen(str));
    return 0;
}

运行结果如下:

同时我们可以利用这点来自己写一个strlen()函数。 代码如下所示:

代码语言:javascript
复制
#include<stdio.h>
#include<string.h>

//strlen的函数返回值类型是unsigned int类型(无符号数),打印无符号数用%zd;
unsigned int my_strlen(char* str)
{
	int count = 0;
	while (*str != '\0')
	{
		count++;
		//对地址进行++操作,跳转到一个数组处
		str++;
	}
	return count;
}

int main()
{
	char arr[] = "hello world!";
	
	printf("%zd\n",my_strlen(arr));//数组名通常情况下表示的都是数组的首地址,所以传递的也是指针变量
	printf("%zd\n",strlen(arr));

	return 0;
}

代码结果:

EOF在C语言中的作用

EOF(End Of File),通常用于指示文件结束或者输入流的结束。同时EOF也是一个特殊的常量,值为 -1。

应用:

我们在做OJ题时,经常会遇到循环输入的要求,而代码通常是如下格式:

代码语言:javascript
复制
int a,b;
while(scanf("%d %d",&a,&b) != EOF )

这里就用到了EOF在从标准输入(键盘输入)读取数据时通过EOF来判断输入结果。 这里我们先了解一下scanf()这个函数:

sacnf函数

scanf()读取匹配format(格式)字符串的输入. 当读取到一个控制字符, 它把值放置到下一个变量. 空白(tabs, 空格等等)会跳过 scanf()的返回值是成功赋值的变量数量, 发生错误时返回EOF.

代码语言:javascript
复制
#include<stdio.h>

int main()
{
	int a, b, c;
	int rec = 0;
	rec = scanf("%d %d %d", &a, &b, &c);
	printf("rec is %d\n",rec);


}

结果如下图所示:

对scanf函数的总结

scanf函数是有返回值的。 一般来说,它的返回值是成功读取的元素个数。但当遭遇读取失败时,它的返回值便是 -1 (也就是它自己返回一个EOF) 。 而若是一个元素都还没成功读入的时候就遇到了读取失败或EOF,那它直接就会返回-1,不管后面再输入了什么。

总结:

虽然’\0’和EOF差别很大,但是很多人在刚接触C语言时经常会对这两个末尾数据搞混。 一个是字符串的结束标志’\0’ ,表示的是空字符, 一个是文件输入的结束标志EOF,其代表着常量-1。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前提知识
    • 字符串的定义
    • 空字符’\0’和EOF的区别:
      • 空字符’\0’
        • 作用
    • EOF在C语言中的作用
      • 应用:
        • sacnf函数
        • 对scanf函数的总结
    • 总结:
    相关产品与服务
    对象存储
    对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档