c语言中NULL和EOF有啥区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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时代表读函数出错,达到了文件尾。
参考技术A End Of File,在电脑的术语缩写通常为 EOF,在作业系统决定资料源无更多的资料可读取。资料源通常称为档案或串流。

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

对于NULL是表示空的意思。
参考技术B

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

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)

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

c语言中,声明和定义有啥区别

参考技术A C语言里可能经常会说:
声明变量时不会分配内存,定义变量时才会分配内存。
局部变量的声明即是定义:
void fun()
int a = 1; //既是声明,也是定义,初始值为1
int b; //既是声明,也是定义,初始值伪随机。

全局变量只能定义一次,可以声明多次,在全局变量不可见的地方但又想使用就得进行声明。
同一个文件中,比如main.c:
extern int a; //声明,不再分配内存,extern关键字表示此变量已在其它地方定义。
void fun()
printf("%d\n",a); //此处用到了全局变量a,而a是在后面定义,所以需要在前面再声明一次。

int a = 1; //全局变量a定义,为它分配内存
int main()

fun();
return 0;

不同文件中:
fun.h:
void fun(); //函数声明
fun.c:
extern int a; //声明,不再分配内存,extern关键字表示此变量已在其它地方定义。
//函数定义
void fun()
printf("%d\n",a); //此处用到了全局变量a,而a是在另外一个源文件中定义,所以需要在前面再声明一次。

main.c:
#include "fun.h"
int a = 1; //全局变量a定义,为它分配内存
int main()

fun();
return 0;

前面主要是针对变量的声明和定义的说明,当然也提到了函数的声明与定义。
函数和变量一样,使用前一定要先声明或者定义,定义本身也是一次声明。
//此处定义函数,有函数体,当然也是一次声明。
void fun()
printf("hello world\n");

int main()

fun(); //fun函数在前面已经定义,所以可直接调用
return 0;

另一例子:
void fun();//此处须声明一次(没有函数体),main函数才能调用它。
int main()

fun(); //fun函数在后面定义。
return 0;

//此处定义函数,有函数体,当然也是一次声明。
void fun()
printf("hello world\n");

以上是关于c语言中NULL和EOF有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

c语言中(c=getchar())!=EOF与c=getchar()!=EOF的区别?

c语言中的boolean 和其他语言的有啥区别?

C语言getchar()和EOF

C语言和C++有啥区别?

c语言与WIN32有啥区别?

请问大家:C语言和C51有啥区别?