精华内容
下载资源
问答
  • fgets函数及其用法,C语言fgets函数详解虽然用 gets() 时有空格也可以直接输入,但是 gets() 有一个非常大的缺陷,即它不检查预留存储区是否能够容纳实际输入的数据,换句话说,如果输入的字符数目大于数组的长度,...

    fgets函数及其用法,C语言fgets函数详解

    虽然用 gets() 时有空格也可以直接输入,但是 gets() 有一个非常大的缺陷,即它不检查预留存储区是否能够容纳实际输入的数据,换句话说,如果输入的字符数目大于数组的长度,gets 无法检测到这个问题,就会发生内存越界,所以编程时建议使用 fgets()。

    fgets() 的原型为:

    # include

    char *fgets(char *s, int size, FILE *stream);

    fgets() 虽然比 gets() 安全,但安全是要付出代价的,代价就是它的使用比 gets() 要麻烦一点,有三个参数。它的功能是从 stream 流中读取 size 个字符存储到字符指针变量 s 所指向的内存空间。它的返回值是一个指针,指向字符串中第一个字符的地址。

    其中:s 代表要保存到的内存空间的首地址,可以是字符数组名,也可以是指向字符数组的字符指针变量名。size 代表的是读取字符串的长度。stream 表示从何种流中读取,可以是标准输入流 stdin,也可以是文件流,即从某个文件中读取,这个在后面讲文件的时候再详细介绍。标准输入流就是前面讲的输入缓冲区。所以如果是从键盘读取数据的话就是从输入缓冲区中读取数据,即从标准输入流 stdin 中读取数据,所以第三个参数为 stdin。

    下面写一个程序:

    # include

    int main(void)

    {

    char str[20]; /*定义一个最大长度为19, 末尾是'\0'的字符数组来存储字符串*/

    printf("请输入一个字符串:");

    fgets(str, 7, stdin); /*从输入流stdin即输入缓冲区中读取7个字符到字符数组str中*/

    printf("%s\n", str);

    return 0;

    }

    输出结果是:

    请输入一个字符串:i love you

    i love

    我们发现输入的是“i love you”,而输出只有“i love”。原因是 fgets() 只指定了读取 7 个字符放到字符数组 str 中。“i love”加上中间的空格和最后的 '\0' 正好是 7 个字符。

    那有人会问:“用 fgets() 是不是每次都要去数有多少个字符呢?这样不是很麻烦吗?”不用数!fget() 函数中的 size 如果小于字符串的长度,那么字符串将会被截取;如果 size 大于字符串的长度则多余的部分系统会自动用 '\0' 填充。所以假如你定义的字符数组长度为 n,那么 fgets() 中的 size 就指定为 n–1,留一个给 '\0' 就行了。

    但是需要注意的是,如果输入的字符串长度没有超过 n–1,那么系统会将最后输入的换行符 '\n' 保存进来,保存的位置是紧跟输入的字符,然后剩余的空间都用 '\0' 填充。所以此时输出该字符串时 printf 中就不需要加换行符 '\n' 了,因为字符串中已经有了。

    下面写一个程序看一下:

    # include

    int main(void)

    {

    char str[30];

    char *string = str; //一定要先给指针变量初始化

    printf("请输入字符串:");

    fgets(string, 29, stdin); //size指定为比字符数组元素少一就行了

    printf("%s", string); //printf中不需要添加'\n', 因为字符串中已经有了

    return 0;

    }

    输出结果是:

    请输入字符串:i love studying C语言

    i love studying C语言

    我们看到,printf 中没有添加换行符 '\n',输出时也自动换行了。

    所以 fgets() 和 gets() 一样,最后的回车都会从缓冲区中取出来。只不过 gets() 是取出来丢掉,而 fgets() 是取出来自己留着。但总之缓冲区中是没有回车了!所以与 gets() 一样,在使用 fgets() 的时候,如果后面要从键盘给字符变量赋值,那么同样不需要清空缓冲区。下面写一个程序验证一下。

    # include

    int main(void)

    {

    char str[30];

    char ch;

    printf("请输入字符串:");

    fgets(str, 29, stdin);

    printf("%s", str); //后面不要加'\n'

    scanf("%c", &ch);

    printf("ch = %c\n", ch);

    return 0;

    }

    输出结果是:

    请输入字符串:i love you

    i love you

    Y

    ch = Y

    fgets函数及其用法,C语言fgets函数详解相关教程

    展开全文
  • C语言fgets函数按行读取文件

    千次阅读 2018-05-06 23:12:45
    Get a string from a stream.C语言没有像C++、Python语言的getline()函数,无法读取文件的某一行。然而,C语言fgets()函数,该函数返回string类型,关键是该函数遇到换行符或EOF,则读取结束。利用这一特点,我们...

    fgets, fgetws
    Get a string from a stream.C语言没有像C++、Python语言的getline()函数,无法读取文件的某一行。然而,C语言有fgets()函数,该函数返回string类型,关键是该函数遇到换行符或EOF,则读取结束。利用这一特点,我们可以设置n为适当的缓冲区大小,即可以实现按行读取。

    char *fgets( char *string, int n, FILE *stream );
    wchar_t *fgetws( wchar_t *string, int n, FILE *stream );

    Function Required Header Compatibility 
    fgets <stdio.h> ANSI, Win 95, Win NT 
    fgetws <stdio.h> or <wchar.h> ANSI, Win 95, Win NT 

    For additional compatibility information, see Compatibility in the Introduction.

    Libraries


    LIBC.LIB Single thread static library, retail version 
    LIBCMT.LIB Multithread static library, retail version 
    MSVCRT.LIB Import library for MSVCRT.DLL, retail version 


    Return Value

    Each of these functions returns string. NULL is returned to indicate an error or an end-of-file condition. Use feof or ferror to determine whether an error occurred.


    Parameters

    string
    Storage location for data

    n
    Maximum number of characters to read

    stream
    Pointer to FILE structure

    Remarks

    The fgets function reads a string from the input stream argument and stores it in string. fgets reads characters from the current stream position to and including the first newline character, to the end of the stream, or until the number of characters read is equal to n – 1, whichever comes first. The result stored in string is appended with a null character. The newline character, if read, is included in the string. 

    fgets is similar to the gets function; however, gets replaces the newline character with NULL. fgetws is a wide-character version of fgets. 

    fgetws reads the wide-character argument string as a multibyte-character string or a wide-character string according to whether stream is opened in text mode or binary mode, respectively. For more information about using text and binary modes in Unicode and multibyte stream-I/O, see Text and Binary Mode File I/O and Unicode Stream I/O in Text and Binary Modes.

    e.g:

    #include "StaticLib.h"
    #include "stdio.h"
    #include "string.h" 
    
    bool fnShow()
    {
    	char cFileName[] = "..\\StaticLib\\StaticLib.h";
    	char cFind[] = "extern";
    	char cLine[1024];
    	int iBuff = 1024;
        FILE *fp;
    	fp = fopen(cFileName,"r");
    	if(NULL == fp)
    	{
    		printf("打开文件失败!\n");
    		return false;
    	}
    	while(!feof(fp))
    	{
    		fgets(cLine,iBuff,fp);
    		if(strstr(cLine,cFind))
    		{
    		    printf("%s",cLine);
    		}
    	}
    
    	fclose(fp);
    	return true;
    }



    展开全文
  • 读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为: fgets(字符数组名,n,文件指针)
  • c语言fgets函数的返回值,什么情况下返回空指针。c语言fgets函数的返回值,什么情况下返回空指针。如题fgets 是系统输入函数,从文件流读入一行字符串,含空格键等,函数原型是: char * fgets ( char * str, ...

    c语言中fgets函数的返回值,什么情况下返回空指针。

    c语言中fgets函数的返回值,什么情况下返回空指针。如题

    fgets 是系统输入函数,从文件流读入一行字符串,含空格键等,函数原型是: char * fgets ( char * str, int num, FILE * stream ); 输入成功时,返回 char 型指针,指向 读入的字符串内容,含换行键(gets 类似,但不含换行键)。

    e939db06f70a94da2848a789983df114.png

    c语言fgets函数返回值问题,要是读到一串字符的末c语言fgets函数返回值问题,要是读到一串字符的末尾,那么函数返回值是N关于 C 语言中的 fgets( ) 函数,该函数的作用就是从文本文件中读取一行文本内容。该函数执行成功将返回读入的字符串 buffer,读取失败或读到文件结尾返回NULL。 例如如下代码: #define MAX 300 void main( ) { unsigned char buffer[MAX] ; FI

    CSS布局HTML小编今天和大家分享教c语言中fgets的用法

    while((*fgets(buffer, 100, stdin) 。= '\n') && (i < 100)) { ps[i] = 从流中读一行或指定个字符,原型是char*fgets(char*s,intn,FILE*stream);从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。 *string结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k。

    C语言里fgets函数怎么用?

    fgets(由文件中读取一字符串) 表头文件 include 定义函数 char * fgets(char * s,int size,FILE * stream); 函数说明 fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1

    关于C语言fgets()读取文件?

    我读写的文件内容 123456 abcdef #include #includeC语言中fgets()函数说明:fgets()用来从参数stream 所指的文件内读入字符并存到参数s 所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1 个字符为止, 最后会加上NULL 作为字符串结束。 原型 char * fgets(char * s, int n,FILE *s

    C语言fgets函数读取换行符吗?

    int main(int argc, char* argv[]) { char buf[256]; fpos_t pos; fp=fofgets函数:原型:char * fgets(char * buf, int bufsize, FILE * stream);功能:从文件结构体指针stream中读取数据,每次读取一行;说明:读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋值为\0)。

    c语言执行fgets时,如何判断是否到了文件末尾?

    C语言 怎么用fgets()读取一个txt文件中的任意行的信息

    展开全文
  • C语言fgets函数

    千次阅读 2018-12-08 22:57:52
    C 库函数 - fgets() 描述 C 库函数 char *fgets...当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。 声明 下面是 fgets() 函数的声明。 char *fgets(char...

    C 库函数 - fgets()

    描述

    C 库函数 char *fgets(char *str, int n, FILE *stream) 从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。

    声明

    下面是 fgets() 函数的声明。

    char *fgets(char *str, int n, FILE *stream)

    参数

    • str -- 这是指向一个字符数组的指针,该数组存储了要读取的字符串。
    • n -- 这是要读取的最大字符数(包括最后的空字符)。通常是使用以 str 传递的数组长度。
    • stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流。

    返回值

    如果成功,该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。

    如果发生错误,返回一个空指针。

    实例

    下面的实例演示了 fgets() 函数的用法。

    #include <stdio.h>
    
    int main()
    {
       FILE *fp;
       char str[60];
    
       /* 打开用于读取的文件 */
       fp = fopen("file.txt" , "r");
       if(fp == NULL) {
          perror("打开文件时发生错误");
          return(-1);
       }
       if( fgets (str, 60, fp)!=NULL ) {
          /* 向标准输出 stdout 写入内容 */
          puts(str);
       }
       fclose(fp);
       
       return(0);
    }

    假设我们有一个文本文件 file.txt,它的内容如下。文件将作为实例中的输入:

    We are in 2014

    让我们编译并运行上面的程序,这将产生以下结果:

    We are in 2014

     

    展开全文
  • 但是 gets() 有一个非常大的缺陷,即它不检查预留存储区是否能够容纳实际输入的数据,换句话说,如果输入的字符数目大于数组的长度,gets 无法检测到这个问题,就会发生内存越界,所以编程时建议使用 fgets()。...
  • c语言fgets函数

    2014-11-27 15:00:48
    从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。 形参注释:*string结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针 fgets的...
  • c语言fgets函数的用法

    千次阅读 2018-03-23 11:46:13
    fgets()函数用于从文件流中读取一行或指定个数的字符,其原型为: char * fgets(char * string, int size, FILE * stream);参数说明:string为一个字符数组,用来保存读取到的字符。size为要读取的字符的个数。如果...
  • C语言fgets函数了解

    2016-11-23 15:26:39
    文件指针stream中读取n-1个字符,存到以s为起始地址的空间里,直到读完一行,如果成功则返回s的指针,否则返回NULL。 例如:一个文件是hello,world, 用fgets(str1,4,file1); 执行后str1="hel",读取...
  • C语言 fgets函数与fputs函数用法

    千次阅读 2017-07-11 18:05:05
    fgets (buf, size, fp) 其行为方式如下: (1)遇到换行或文件结束EOF则返回。 (2)按行读取。 (3)每一行结束处的换行字符‘/n’也算该行字符。 (4)对于大小为size的buf,最多只读取size-1个字符。 (5)...
  • C语言fgets读取整个文本文件的内容

    万次阅读 2016-05-13 09:49:27
    C语言fgets读取整个文本文件的内容 #include #include #include #include //函数返回fname指定文件的全部内容,如果打不开文件,则返回NULL,并显示打开文件错误 char *getfileall(char *fname) { FILE *fp...
  • 读文本文件: (给出四种读取方法) #include <iostream> #include <fstream> //读写操作 #include <string> using namespace std; int main() { //1,包含头文件 //2,创建流对象 ...
  • C语言fgets和fgetc函数读取文件

    千次阅读 2020-03-19 19:54:48
    C语言fgets和fgetc函数读取文件 1、fgetc 是 file get char 的缩写,意思是从指定的文件中读取一个字符。 fgetc() reads the next character from stream and returns it as an unsigned char cast to an int, or...
  • //测试当使用fgets函数读取文件到字符数组中时,会覆盖字符数组原有成员 #include<stdio.h> #include<conio.h> void main() { char str1[20] = {"student"}; char str2[20] = { "teacher" }; FILE ...
  • 之前的博客提到了怎样对长度不确定且无法估计的文本文件进行按行读取的问题,这次我发现了一个每一行的末尾换行符处理的问题以及fgets的一个特性,这都是我之前没有注意到的地方。 文章目录1.每行末尾换行符的处理...
  • C语言fgets()函数

    2020-03-23 21:39:25
    str是要存入的字符的字符数组的指针,num指定了读入字符的最大个数,fgets()函数会在遇到第一个换行符或者读取了num-1个字符后停止读取;stdin指定了从键盘读入,需要注意的是,当一行字符串的个数小于num-1时,fgets...
  • num: 最多读取num-1个字符,或者遇到文件结束符EOF为止(即“文件读完了”)返回值; 读取失败时, 返回NULL,读取成功时,返回str #include <stdio.h> int main(void) { FILE *file1; char tmp[64]; ...
  • 头文件:includefgets()函数用于从文件流中读取一行或指定个数的字符,其原型为:char * fgets(char * string, int size, FILE * stream);参数说明:string为一个字符数组,用来保存读取到的字符。size为要读取的...
  • gets和fgets函数及其区别,C语言gets和fgets函数详解 每当讨论 gets 函数时,大家不由自主地就会想起 1988 年的“互联网蠕虫”,它在 UNIX 操作系统的 finger 后台程序中使用一个 gets 调用作为它的攻击方式之一。很...
  • 每当讨论 gets 函数时,大家不由自主地就会想起 1988 年的“互联网蠕虫”,它在 UNIX 操作系统的 finger 后台程序中使用一个 gets 调用作为它的攻击方式之一。很显然,对蠕虫病毒的实现来说, gets 函数的功劳不可...
  • C语言fgets()函数的用法总结

    千次阅读 2020-02-27 12:47:34
    从c++11之后取消了gets()函数,用fgets()代替,用法有所不同,这里详细介绍下fgets()该如何使用。 char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream) 第一个参数为数据存放的数组,第二个...
  • 具体代码: ...size))) //如果文件没有结束并且数组没有满,那么就持续循环 { //读取一行到buf中 if (fgets(buf, 1024, fp) != NULL) { k++; printf("fgets执行了 %d 次 ------", k); } //将b
  • C语言中的fgets函数

    万次阅读 2017-11-13 20:46:10
    C语言文件操作之fgets() 原创 2013年01月25日 11:57:00 标签:C语言 /fgets... /文件操作函数 142460  来说一说fgets(..)函数。  原型 char * fgets(char * s, int n,FILE *...
  • 函数名: fgets头文件:用 法:char *fgets(char *s, int n, FILE *stream);功 能: 从流中读取一字符串参 数: char *s 保存读取数据的字符串int n 读n-1个字符;FILE *stream 要获取字符串的文件流返回值: 成功 s所指...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,894
精华内容 4,357
关键字:

c语言fgets函数读取文件

c语言 订阅