c语言中gets ,getschar 和fgets 的用法及三者之间的差别

2020-06-14 科技 199阅读
gets():
原型:char *gets(char *buffer) ;
功能:从stdlin中获取获取字符串一直到换行符或者遇到EOF为止,但换行符不被录取,会将换行符替换成‘\0’来表示字符串的结束
返回值:如果读取成功会返回buffer指针,如果遇到EOF或者发生错误会返回NULL,当遇到NULL需要调用ferror()和feof()来判断是遇到EOF还是发生了错误
ps:该函数读取一直读到遇到换行符为止,所以很容易发生溢出的情况,如果发生溢出,会覆盖堆栈中的内容,改变不相关的变量,我们可以使用fget()替换gets(),为了向后兼容,不会将换行符放入缓冲区中。
[cpp] view plaincopy
#include "stdio.h" //这个头文件包含gets()函数
int main()
{
char str1[15];
gets(str1);
printf("%s\n", str1);
getchar() ;
return 0;
}
此时就可以从键盘上读取一个字符串到str1中
ps:scanf("%s", str1) ;这样也可以输入字符串,如果遇到空格符就会认为字符串结束了,空格后的字符作为下一个字符串,但gets()会遇到换行符为止
*****************************
getchar():
功能:这个函数由宏#define getchar() getc(stdin) 从标准输入中读取字符,等待用户输入字符串一直到换行符为止,用户输入的字符将会存入键盘缓冲区中包括换行符,他会读取第一个字符,返回第一个字符的ASCII码,getchar()会从缓冲区中读取剩下的字符一直到读完为止,然后等待如果输入换行符
ps:getch()和getchar()差不多,但getch()在用户输入后就立即返回了不等待用户输入换行符,会返回输入字符的ASCII码,如果错误就-1,这个经常用于调试中
[cpp] view plaincopy
#include
#include
int main()
{
int c ;
int a ;
a = getchar() ;
while((c = getchar()) != '\n')
{
printf("%c", c) ;
}
getchar() ;
return 0 ;
}
fgets():
函数原型:char *fgets(char *buf, int bufsize, FILE *stream);
从文件结构指针stream中读取数据,每次读取bufsize-1个数据,第bufsize个赋值成'\0',如果不足bufsize个数据则返回,如果遇到eof或者错误则返回Null,如果成功就返回buf地址
[cpp] view plaincopy
#include
#include
#include
int main()
{
FILE *stream;
char string[] = "Love, I Have\nSince you can do it.";
char msg[20];
/*
*FILE * fopen(const char * path,const char * mode);
*以w+的方式:以读写的方式打开,如果有文件则清零,没有则要新建一个新的 */
stream = fopen("DUMMY.txt", "w+");
/*
*size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
*buffer:代表要写入的数据
*size:写入每项的字节数
*count:写入的项数
*stream:要写入的字节流
*/
fwrite(string, strlen(string), 1, stream);
/* 定位到文件的开始 */
fseek(stream, 0, SEEK_SET);
fgets(msg, 6, stream);//此时文件指针会第六个字符
printf("%s\n", msg);
fgets(msg, 20, stream);
printf("%s", msg);

fseek(stream, 0, SEEK_SET);
fgets(msg, 23, stream);
printf("%s", msg);
fclose(stream);
system("pause") ;
return 0;
}
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com