fgets和gets

2024-02-22 15:38
文章标签 gets fgets

本文主要是介绍fgets和gets,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

两者主要在安全性上存在差别。

函数名: fgets

功 能: 从流中读取一字符串

用 法: char *fgets(char *string, int n, FILE *stream);

形参注释:*string输入数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针

序 例:



fgets函数fgets函数用来从文件中读入字符串。fgets函数的调用形式如下:fgets(str,n,fp);此处,fp是文件指针;str是 存放在字符串的起始地址;n是一个int类型变量。函数的功能是从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字 符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符。因此,确切地说,调用fgets函数时,最多只能读入n-1个字符。读入结束后,系统将自动在最后加'/0',并以str作为函数值返回。
gets()将删除新行符, fgets()则保留新行符.

要去掉fgets()最后带的“/0",只要用 s[strlen(s)-1]='/0';即可。

 

针对于fgets,还要再说两句,下面这种用法,是安全的判断文件读取结束或者出错的好方式,切忌不能使用while(!feof(fp)) ,还有对于fgets的第二个参数是最大能读取文件字符的个数,一般最大的长度是1024字节。

 

while(fgets(..., stream)){
        /* ... */
}

if(ferror(stream)){
        /* ... */
}

这篇关于fgets和gets的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/735719

相关文章

C语言gets()与scanf()

先列举几种情况,以下的代码只有输入方式有变化: 1. #include<string>#include<math.h>using namespace std;int main(){char m[33];char n[33];gets(n);gets(m);printf("%s",m);//正常输出return 0;} 2. #include<string>#include<math.

fgets()和fread()函数

fgets(): fgets函数用来从文件中读入字符串。fgets函数的调用形式如下:fgets(str,n,fp);此处,fp是文件指针;str是存放在字符串的起始地址;n是一个int类型变量。函数的功能是从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行

《C语言杂记》C语言使用gets函数出现的警告问题

首先我们来看个程序。 #include <stdio.h>#include <string.h>int main(int argc, char *argv[]){char s[100];printf("输入字符串:\n");gets(s); printf("%s\n",s); return 0;} 但是在编译的时候回出现如下警告。 main.c: In function ‘main’

poj 2886 Who Gets the Most Candies?

单点更新,还有凡素数表,所谓反素数, 对于任何正整数x,起约数的个数记做g(x).例如g(1)=1,g(6)=4. 定义:如果某个正整数x满足:对于任意i(0<i<x),都有g(i)<g(x),则称x为反素数. 现在给一个N,求出不超过N的最大的反素数. 比如:输入1000 输出 840 思维过程: 求[1..N]中最大的反素数-->求约数最多的数 如果求约数的个数

POJ 2886 Who Gets the Most Candies? (线段树,单点更新)

http://poj.org/problem?id=2886 Who Gets the Most Candies? Time Limit: 5000MS Memory Limit: 131072KTotal Submissions: 9426 Accepted: 2871Case Time Limit: 2000MS Description N children are sitt

编译安装libiconv报错:./stdio.h:1010:1: error: 'gets' undeclared here (not in a function)

1. libiconv编译时遇到以下报错 In file included from progname.c:26:0:./stdio.h:1010:1: error: ‘gets’ undeclared here (not in a function)_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead")

C语言 gets函数 puts函数 getchar函数

gets函数从标准输入读取一行文本并把它存储于作为参数传递给它的数组中。 一行输入由一串字符组成,以一个换行符(newline)结尾。 gets函数丢弃换行符,并在改行的末尾存储一个NULL字节(一个NULL字节是指字节模式为全0的字节,类似’\0’这样的字符常量)。然后,gets函数返回一个非NULL值,表示该行已被成功读取。 当gets函数被调用,但事实上不存在输入行时,它就返回NULL值,表

scanf()、getchar()、gets()、cin之间的区别

问题描述一:(分析scanf()和getchar()读取字符)           scanf(), getchar()等都是标准输入函数,一般人都会觉得这几个函数非常简单,没什么特殊的。但是有时候却就是因为使用这些函数除了问题,却找不出其中的原因。下面先看一个很简单的程序: 程序1:      #include <stdio.h>int main

gets 和getchar 的区别

https://blog.csdn.net/zqixiao_09/article/details/50189477 转载 非原创

fgets()函数的使用方法及注意事项(笔记)

fgets()函数:用于读取文件字符串 头文件:include <stdio.h> 函数说明:fgets()函数用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,知道出现换行符,读到文件尾或是已经读到size-1个字符为止,最后再加上NULL作为字符串结束标志。 注意; gets函数由于没有指定输入字符的大小,如果输入字符大于数组长度时,会产生内存越界,而fgets