前言
对输出输入做的一些笔记,以及需要注意的地方。
gets()与fgets()
gets()
gets函数原型:char*gets(char*buffer);
//读取字符到数组:gets(str);str为数组名。
gets函数功能:从键盘上输入字符,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。
读取的换行符被转换为null值,做为字符数组的最后一个字符,来结束字符串。
注意:gets函数由于没有指定输入字符大小,所以会无限读取,一旦输入的字符大于数组长度,就会发生内存越界,
从而造成程序崩溃或其他数据的错误。
fgets()
fgets函数原型:char *fgets(char *s, int n, FILE *stream);
//我们平时可以这么使用:fgets(str, sizeof(str), stdin);
其中str为数组首地址,sizeof(str)为数组大小,stdin表示我们从键盘输入数据。
fgets函数功能:从文件指针stream中读取字符,存到以s为起始地址的空间里,直到读完N-1个字符,或者读完一行。
注意:调用fgets函数时,最多只能读入n-1个字符。读入结束后,系统将自动在最后加’\0’,并以str作为函数值返回。
#include <stdio.h>
int main( )
{
char str[5];
printf( "Enter a value :");
gets( str );
printf( "\nYou entered: ");
puts( str );
return 0;
}
如果输入123(长度小于5)结果为:
Enter a value :123
You entered: 123
如果输入123456789(长度大于5)结果为:
Enter a value :123456789
You entered: 123456789
虽然正常显示了,但是系统提示程序崩溃了
如果不能正确使用gets()函数,带来的危害是很大