精华内容
下载资源
问答
  • c文件读取fgets

    2011-11-04 11:57:30
    char* fgets(char* s, int size, FILE* fp) 用法 函数会读取最多size大小的数据到s中,当遇到EOF或者新行时也会停止,并将换行符“\n”保存在s中。 示例代码:  1 #include  2 #include  3 void ...

    函数原型

    char* fgets(char* s, int size, FILE* fp)


    用法

    函数会读取最多size大小的数据到s中,当遇到EOF或者新行时也会停止,并将换行符“\n”保存在s中。


    示例代码:

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 void main()
      4 {
      5   FILE *fp = fopen("test.in","r");
      6   char in[100],in2[100];
      7   fgets(in,sizeof(in),fp);
      8   fgets(in2,sizeof(in2),fp);
      9   printf("%s%s",in,in2);
     10 }


    test.in


      1 this is a test!
      2 hello world!
      3 god bless me!
      4


    运行结果:

    this is a test!
    hello world!

    展开全文
  • 背景: 主机上有xml格式的文件

    背景:主机上table.xml文件定义了业务处理要用的表项,主机需要将该xml文件内容传递给应用程序。由于看代码发现有现成的函数将主机内存中的数据生成xml文件。如下

    include <stdio.h>
      2 void  str2xml(char *pTable)//pTable指向内存中的xml字符
      3 {
      4     FILE *fd;
      5     fd = fopen("/home/table.xml","aw+");//在home目录下创建table.xml文件
      6     if (fd)
      7     {
      8         fputs(pTable,fd);
      9     }   
     10     fclose(fd);
     11     return ;
     12 }
    

    要实现的是逆过程,查看C语言的文件操作函数,对应fputs的从字面看应该是fgets,于是Ctrl C,Ctrl V写了如下代码;

     #include <stdio.h>
     14 #define XML_FILE_MAX_SIZE  102400
     15 void  xml2str(char *pTable)
     16 {   
     17     FILE *fd;
     18     fd = fopen("/home/table.xml","r");//打开home目录下的table.xml文件
     19     if (fd)
     20     {   
     21         fgets(pTable,XML_FILE_MAX_SIZE,fd);//table.xml文件读入pTable
     22     }
     23     fclose(fd);
     24     return ;
     25 }
    
    花半小时编译(工程比较大),再花半小时装载到设备&启动。

    gdb调试发现table.xml只有首行写入pTable了。进一步man fgets才发现“char *fgets(char *s, int size, FILE *stream); reads in at most one less than size characters from stream and stores them into the buffer pointed to by  s.   Reading  stops after  an  EOF or a newline.  If a newline is read, it is stored into the buffer.  A terminating null byte ('\0') is stored after the last character in the buffer.” 于是修改如下

    #include <stdio.h>
     14 #define XML_FILE_MAX_SIZE  102400 //XML文件最大size
     15 #define BUFF_SIZE  100
     16 void  xml2str(char *pTable)
     17 {
     18     FILE *fd;
     19     char buff[BUFF_SIZE];
     20     int i = 1;
     21     char * pcTemp = pTable;
     22     fd = fopen("/home/table.xml","r");
     23     if (fd)
     24     {   
     25         while(fgets(buff,BUFF_SIZE,fd) != NULL)//fgets读到还行符号或者EOF即停止,如果文件是多行的,每次只读一行
     26         {
     27             strncpy(pcTemp,buff,BUFF_SIZE);
     28             printf("line[i++]:%s",pcTemp);
     29             pcTemp += strlen(buff);
     30         }   
     31     }   
     32     fclose(fd);
     33     return ;
     34 }   
    

    
    调试发现,有些行不能输出,定位发现xml文件的某些行多于150个字符,修改扩大BUFF_SIZE 解决。通过这番折腾,经验注意害死人啊,先想清楚再动手。
    
    
    


    展开全文
  • while(fgets(line, 100, file)) { printf("%s\n", line); word = strtok(line, " :"); if(word == NULL) continue; name = atoi(word); /* only if you didn't actually want hexadecimal */ word = strtok(NULL, ...

    这些问题实际上是你想要做的事情 myArray[name] = word; .

    有's some other problems with your code, you'从行 word = (char *) malloc(16); 泄漏内存,因为strtok返回指向最初传递它的字符串的指针 . 你实际上不需要为问题中所写的代码malloc任何东西,所以你可以:

    char myArray[3000];

    char line[100];

    char *word = NULL;

    word 需要是指针,因为它持有 strtok() 的结果

    你显然不明白指针,你需要先了解它,然后才能理解为什么你的代码没有按照你期望的方式工作 .

    如果你说你的代码实际意味着什么,我可以给你一些如何解决它的提示,但目前我还不能确定预期结果是什么 .

    编辑:您打算用十六进制读取您的数字吗? strtol() 的最后一个参数是用于转换的基础...你也可以只使用 atoi()

    所以你的循环看起来像:

    char myArray[3000];

    char line[100];

    char *word = NULL;

    while(fgets(line, 100, file)) {

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

    word = strtok(line, " :");

    if(word == NULL) continue;

    name = atoi(word); /* only if you didn't actually want hexadecimal */

    word = strtok(NULL, " \n");

    if(word == NULL) continue;

    if(name > 0 && name < 3000) { /* as I said in a comment below */

    strncpy(myArray + name, word, 3000 - name);

    }

    }

    展开全文
  • 需要解决的问题:有一个文本,每行由16个 0到f的字符组成(64bit的数字写成十六...按行读取文本,我采用的是fgets()函数。 #include &lt;stdint.h&gt; #include &lt;stdio.h&gt; #include &lt...

    需要解决的问题:有一个文本,每行由16个 0到f的字符组成(64bit的数字写成十六进制表示),需要统计整个文本中0到f 十六个字符的个数。

    matlab做循环运算比较慢,特别在循环次数很多的时候更慢。这时候用C更有优势。按行读取文本,我采用的是fgets()函数。

    #include <stdint.h>
    #include <stdio.h>
    #include <stdint.h>
    #include <memory.h>
    #include <ctype.h>
    
    int main(){
    
    FILE* fp = fopen("a.txt","r");
    if(fp == NULL){
      printf("Error: read file failure.\n");
      exit(-1);
    }
    
    
    char txt[1000] = {0};  //存储每行的字符串
    uint64_t stat[16] = {0}; //统计
    char sample[16] = {'0', '1', '2', '3',
                       '4', '5', '6', '7',
                       '8', '9', 'a', 'b',
                       'c', 'd', 'e', 'f'};
    int i,j;
    while(!feof(fp)){
      memset(txt, 0, sizeof(txt));
      fgets(txt, sizeof(txt-1), fp); //读取一行字符串
      
      if(strlen(txt) != 17) //防止出现异常行
        continue; 
    
      for(i = 0; i < 16; i++){
        for(j = 0; j < 16; j++){
          if(txt[i] == sample[j]
            stat[j]++;
            break;
        }
      }
    }
    fclose(fp);
    
    for(i = 0; i < 16; i++){
      printf("%u\n", stat[i]);
    }
    }

    如果是按2bit统计,那么只需要修改中间部分代码

    char sample[4] = {0, 1, 2, 3};
    int data, index;
    for(i = 0; i < 16; i++){
      if(isdigit(txt[i])
         data = txt[i] - 48;
      else if(isupper(txt[i])
         data = txt[i] - 55;
      else 
         data = txt[i] - 87;
    
      index = data & 0x3;
      for(j = 0; j < 4; j++){
        if(index == sample[j]){
          stat[j]++;
          break;
        }      
      }
    
      index = (data & 0xc)>>2; //记得右移2位
      for(j = 0; j < 4; j++){
        if(index == sample[j]){
          stat[j]++;
          break;
        }      
      }
    }

     

    展开全文
  • 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读取文件

    2015-11-01 22:42:00
    如果一个文件比较大,可以考虑用fgets函数 下面是个例子: #文件作用:fgets读取文件 $start_time = microtime(...
  • PHP 中提供了两个函数可以实现逐行读取文件,分别是 fgets() 和 fgetss(),下面来分别介绍一下这两个函数。1、fgets() 函数fgets() 函数用于一次读取一行数据。函数的语法格式如下:fgets(resource $handle[, int $...
  • php fgets()函数从文件指针中读取一行 语法: fgets(file,length) 参数 描述 file 必需。规定尧要读取文件 length 可选 。规定尧都区的字节数。默认是102字节 从file指向的...
  • #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #define SIZE 81 #include&lt;string.h&gt; void main() ...//打开文件,判断是否打开 char *file=(“C:/Users/Administ...
  • PHP 文件读取 fread、fgets、fgetc、file_get_contents 与 file 函数 fread()、fgets()、fgetc()、file_get_contents() 与 file() 函数用于从文件中读取内容。 fread() fread() 函数用于读取文件(可...
  • Atitit 文件读取规范 目录 1.1. 以fgetss取代fgets读取一行并过滤掉 HTML 和 PHP 标记。 1 1.2. 3. 以二进制读取 fread取代fgets 1 1.3. 4.将整个文件读入到一个字符串的方法 file_get_contents() 2 1.4. 5....
  • } 练习: 从一个文件(文本文件)中读取所有信息,写入另一个文件 void test05() { //需求:从a.txt读取文件内容 写入到b.txt FILE *fp1 =NULL; FILE *fp2 =NULL; //以只读的方式打开a.txt fp1 = fopen("a.txt","r...
  • 最后重新使用“fgets”函数读取文件即可。php读取txt文件中文乱码解决方法1:如果打开的页面有乱码,别急,先不要做任何编辑,切记2:然后点击菜单修改-》页面属性-》标题/编码3:在编码里选择 简体中文(gb2321)4:点击 ...
  • php fgets()函数介绍fgets — 从文件指针中读取一行,从指向的文件读取了指定字节后返回字符串。 如果文件指针中没有更多的数据或发送错误则返回 FALSE。语法:string fgets ( resource $handle [, int $length ] ...
  • C语言fgets函数按行读取文件

    千次阅读 2018-05-06 23:12:45
    Get a string from a stream.C语言没有像C++、Python语言的getline()函数,无法读取文件的某一行。然而,C语言有fgets()函数,该函数返回string类型,关键是该函数遇到换行符或EOF,则读取结束。利用这一特点,我们...
  • 每一种函数都对应一个非常有用的读取目的,这篇博客就是把他们简单的归纳总结一下 # C语言中不同读取函数的用法与区别:1. fgets()函数语法参数描述返回值范例2. fgetc()函数语法参数描述返回值范例 1. fgets()函数 ...
  • 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...
  • 今天遇到一个使用fread和fgets读取文件出现乱码 fgets(readLine, MAX_LINE_SIZE, fp); fread(readLine,1,MAX_LINE_SIZE,fp); 经过一番探索,发现因为文件编码是非ANSI格式(是UTF-8),最后将文本文件改为: 之后保存,...
  • 不想接传单了,看见老人也不想让座...---- 网易云热评一、打开文件fopen()fp=fopen("123.txt","w");char buf[]="abc.txt";fp=fopen(buf,"w");char *p="123.txt";fp=fopen(p,"r");1、打开成功,返回有效地址2、打开失...
  • <?php //首先采用“fopen”函数打开文件,得到返回值的就是资源类型...if ($file_handle){ //接着采用while循环(后面语言结构语句中的循环结构会详细介绍)一行行地读取文件,然后输出每行的文字 while (!feof($...
  • } //使用C语言读取文件 void ReadFile1() { FILE *fp; fp = fopen("0501.txt", "r"); if (!fp) { printf("文件打开失败\n"); return; } //读取第一行:fgets char str1[20]; fgets(str1, 10, fp); cout ; //分解第一...
  • C语言fgets读取整个文本文件的内容

    万次阅读 2016-05-13 09:49:27
    C语言fgets读取整个文本文件的内容 #include #include #include #include //函数返回fname指定文件的全部内容,如果打不开文件,则返回NULL,并显示打开文件错误 char *getfileall(char *fname) { FILE *fp...
  • #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> int main () { FILE *fp=fopen("1.txt","w"); char buf[100]=""; int num=0;... //使用fgets读出 printf
  • fgets()读取文件问题

    2017-02-09 15:13:59
    windows vs 2012下用C写程序,socket传输文件,客户端用fgets()读取文件并向server传输出现问题 用fgets时不能读取指定长度,而且每使用一次,读取的长度减小一个字节,不知道是哪里出bug啦 代码片段如下如下...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,239
精华内容 495
关键字:

文件读取fgets