c语言中NULL和EOF有什么区别

题目Input任意长度的字符串。
Output
原样输出该字符串。

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
char a[100000000];
int main()
{
while(gets(a)!=EOF)
{
puts(a);
}
return 0;
}

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
char a[100000000];
int main()
{
while(gets(a)!=NULL)
{
puts(a);
}
return 0;
}
只把EOF改成NULL了,为什么第一个是错的第二个是对的?

C语言中的NULL代表空指针,其定义为
#define NULL (void *)0
EOF是End Of File的简写,即文件结尾。其定义为
#define EOF -1

二者区别:
1 值不同,NULL是0, EOF是-1。
2 类型不同,NULL是指针,而EOF只是普通的整型常量。
3 应用范围不同。
NULL一般用作指针操作,包括指针类型赋初始值,返回指针类型的函数在出错时的返回值等。
EOF一般用于输入函数,比如scanf, 或者各种读文件操作函数等。当返回EOF时代表读函数出错,达到了文件尾。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-01
End Of File,在电脑的术语缩写通常为 EOF,在作业系统决定资料源无更多的资料可读取。资料源通常称为档案或串流。

在 C语言,或更精确地说成 C标准函式库,档案存取或其它 I/O 功能可能传回等于象征符号值 (巨集) EOF 指示档案结束的情形发生。实际上 EOF 的值通常为 -1,但它依系统有所不同。巨集 EOF 会在编译原始码前展开实际值给预处理器。

对于NULL是表示空的意思。
第2个回答  推荐于2017-11-27

这问题其实可以通过查看头文件的宏定义来了解

NULL

#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
#define offsetof(s,m) (size_t)&(((s *)0)->m)

EOF

#define EOF     (-1)

本回答被提问者和网友采纳
相似回答