精华内容
下载资源
问答
  • fgets函数用于读取指定文件中的一行,其函数原型为:char * fgets(char * s, int n,FILE *stream); 参数s:将读取的行存入字符型指针s指向的地址 参数n:读取n-1个字符 参数stream:从文件指针stream所指位置的文件...

    fgets函数用于读取指定文件中的一行,其函数原型为:char * fgets(char * s, int n,FILE *stream);
    参数s:将读取的行存入字符型指针s指向的地址
    参数n:读取n-1个字符
    参数stream文件指针stream所指位置的文件缓存区读取
    以下做一个示例:
    创建一个.csv格式的文档,每列之间的元素用“,”隔开,行与行之间用换行隔开。
    在这里插入图片描述
    在这里插入图片描述
    代码如下:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main()
    {
    	char FlNm[] = "E:\\TstTbl.csv";
    	FILE* fp;  // 文件指针定义
    	fp = fopen(FlNm, "r");
    	if (fp == NULL)  // 文件指针赋值失败
    	{
    		printf("文件读取失败");
    		return 1;
    	}
    	else
    	{
    		char RdStrng[1000];
    		fgets(RdStrng, 1000, fp);
    		printf("%s", RdStrng);
    	}
    	return 0;
    }
    

    输出:
    在这里插入图片描述
    fgets函数只读取了一行就没有继续读取了,是因为读到了第一行行尾的换行符。
    一般地,我们用while循环实现整个文件内容的读取,直到读取到文末的NULL才终止:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main()
    {
    	char FlNm[] = "E:\\TstTbl.csv";
    	FILE* fp;  // 文件指针定义
    	fp = fopen(FlNm, "r");
    	if (fp == NULL)  // 文件指针赋值失败
    	{
    		printf("文件读取失败");
    		return 1;
    	}
    	else
    	{
    		char RdStrng[1000];
    		while (fgets(RdStrng, 1000, fp) != NULL)
    		{
    			printf("%s", RdStrng);
    		}
    	}
    	return 0;
    }
    

    输出:
    在这里插入图片描述

    展开全文
  • 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;
    }



    展开全文
  • php一行一行读取文件_fgets函数

    万次阅读 2007-06-06 16:16:00
    php一行一行读取文件fgets函数php文档中 fgets函数势利有点问题这是我的一个例子: $filepath = $_SERVER[DOCUMENT_ROOT]; $filename = $filepath."/resource/dat/users.txt"; $handle = fopen ($filename, "r...

    php一行一行读取文件fgets函数

    php文档中 fgets函数势利有点问题

    这是我的一个例子:

     

    $filepath =  $_SERVER['DOCUMENT_ROOT'];  
      $filename = $filepath."/resource/dat/users.txt";
      $handle  = fopen ($filename, "r");
      //$contents = fread ($handle, filesize ($filename));
    //echo $contents;
      
      while (!feof ($handle))
      {
        $buffer  = fgets($handle, 4096);
       
        $username = trim($buffer);
        echo $username
        }

     fclose ($handle);

     
    展开全文
  • 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函数详解相关教程

    展开全文
  • php用fgets读字符串的时候,本来遇到换行就停止读了,但是实际会在字符串后面多读点东西,我感觉是windows的换行的原因,\r\n,可能是这个原因,最后总有个空格,导致我在使用字符串的时候总发生错误。进过尝试,...
  • fgets函数

    万次阅读 多人点赞 2015-01-12 15:18:20
    在《征服C指针》中很少用到scanf()函数,而是使用fgets函数和sscanf函数的组合,于是仔细看了下fgets函数的用法。  char *fgets(char *s, int size, FILE *stream);  fgets() reads in at most one less than...
  • gets和fgets函数及其区别,C语言gets和fgets函数详解 每当讨论 gets 函数时,大家不由自主地就会想起 1988 年的“互联网蠕虫”,它在 UNIX 操作系统的 finger 后台程序中使用个 gets 调用作为它的攻击方式之。很...
  • fgets函数测试

    2021-01-20 15:59:05
    调用fgets函数如果成功的读取到内容,函数返回buf,如果读取错误或文件已结束,返回空,即0。如果fgets返回空,可以认为是文件结束而不是发生了错误,因为发生错误的情况极少出现。 函数理解: 读取一次 ≠ 读取一行...
  • (给出四种读取方法) #include <iostream> #include <fstream> //读写操作 #include <string> using namespace std; int main() { //1,包含头文件 //2,创建流对象 ifstream ifs; ...
  • php fgets函数读取多余的空格解决

    千次阅读 2015-09-05 14:01:05
    php用fgets读字符串的时候,本来遇到换行就停止读了,但是实际会在字符串后面多读点东西,我感觉是windows的换行的原因,\r\n,可能是这个原因,最后总有个空格,导致我在使用字符串的时候总发生错误。 进过尝试,...
  • 但是 gets() 有个非常大的缺陷,即它不检查预留存储区是否能够容纳实际输入的数据,换句话说,如果输入的字符数目大于数组的长度,gets 无法检测到这个问题,就会发生内存越界,所以编程时建议使用 fgets()。...
  • 这里给出很多例子,读者自行写代码验证印象会更加深刻fputs函数fgets函数典型问题分析小结 fputs函数 我们给出使用的测试代码: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <...
  • 关于fgets函数

    2016-08-29 20:18:56
    如果fgets函数读入的字符串在读到换符时,会在字符串后面加上”\n“和”\0“,如此一来,当用strlen函数读取字符串长度时会比实际字符串长度多1。 #include #include #define MAX 100+10 char a[MAX]; int main...
  • fgets函数 sprintf函数

    2021-01-13 20:54:37
    char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream) ...可以看到fgets()读取的字符串长度包含了结尾的 ‘\0’,遍历数组时要注意下标越界。strlen(A)-1 为字符串实际长度 ...
  • fgets函数与fputs函数

    2015-06-25 18:43:30
    功能:从文件流读取一行,送到缓冲区,使用时注意以下几点:  返回值:成功时s指向哪返回的指针就指向哪,出错或者读到文件末尾时返回NULL fgets函数,参数s是缓冲区的首地址,size是缓冲区的长度,该函数从str
  • fgets函数 和 fputs函数

    2017-11-08 15:31:00
    功能:从文件流读取一行,送到缓冲区,使用时注意以下几点:返回值:成功时s指向哪返回的指针就指向哪,出错或者读到文件末尾时返回NUL fgets函数,参数s是缓冲区的首地址,size是缓冲区的长度,该函数从stream所指...
  • fgets 函数

    2018-11-08 19:17:58
    #include &lt;stdio.h&gt; #define MAX 1024 int main() ...请输入个字符串:"); fgets(str, MAX, stdin); printf("您输入的内容是:%s", str); return 0; } ...
  • fgets函数使用

    2016-11-13 20:15:03
    fgets 函数使用 函数原型char *fgets(char *buf, int bufsize, FILE *stream);参数 *buf: 字符型指针,指向用来存储所得数据的地址。 bufsize: 整型数据,指明存储数据的大小。 *stream: 文件结构体指针,将要...
  • fgets 函数详解

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

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,573
精华内容 7,429
关键字:

fgets函数读取一行