fgets读取文件时的注意事项

1 文本文件 a.txt 内容如下



2 c代码
  FILE *fil;
    if (!(fil = fopen("/home/rudy/projects/paser/a.txt", "rb"))) {
        printf("File I/O error,the File is not exist\n");
        exit(0);
    }
 int line = 0;

    while(!feof(fil)) {
        if (fgetc(fil) == ‘\n‘) {
            ++line;
        }
    }
    ++line;

    fclose(fil);
    if (!(fil = fopen("/home/rudy/projects/paser/a.txt", "rb"))) {
        printf("File I/O error,the File is not exist\n");
        exit(0);
    }
    char ** all =(char **) malloc( line * sizeof(char *));

    for (int iCurrLineIndex = 0; iCurrLineIndex < line; ++iCurrLineIndex) {

        all[iCurrLineIndex] = (char *) malloc(20 );

        fgets(all[iCurrLineIndex], 21, fil);
    }

 for (int iCurrLineIndex = 0; iCurrLineIndex < line; ++iCurrLineIndex) {
        printf("this is len = %d \n",strlen(all[iCurrLineIndex]));
        for(int i = 0;i <11;i++) {
            if (all[iCurrLineIndex][i] == ‘\0‘)
            {
                printf("%s\n ","this is 0");
            }else if ( all[iCurrLineIndex][i]== ‘\n‘)
            {
                printf("%s\n ","this is n");
            }else{
                printf("%c ",all[iCurrLineIndex][i]);
            }
        }
        printf("\n");

    }

输出结果

 

this is len = 10
1 2 3 4 5 6 7 8 9 this is n
 this is 0

this is len = 10
a b c d e f g h i this is n
 this is 0

this is len = 9
1 2 3 4 5 6 7 8 9 this is 0
 this is 0

总结: fgets读取时,如果指定的读取大小,小于实际行大小 那么 不添加\n做结尾,使用\0 ,然后接着读取没读完的当前行数据作为新的一行开始

    fgets读取时,如果指定读取大小.大于实际行大小,那么将\n添加到末端.再添加\0

   \0不算做有效长度里的元素,\n算有效长度里元素

时间: 2024-10-12 14:44:14

fgets读取文件时的注意事项的相关文章

解决Python读取文件时出现UnicodeDecodeError: &#39;gbk&#39; codec can&#39;t decode byte...

用Python在读取某个html文件时会遇到下面问题: 出问题的代码: 1 if __name__ == '__main__': 2 fileHandler = open('../report.html', mode='r') 3 4 report_lines = fileHandler.readlines() 5 for line in report_lines: 6 print(line.rstrip()) 修改方式是在open方法指定参数encoding='UTF-8': if __nam

php函数fgets读取文件

如果一个文件比较大,可以考虑用fgets函数 下面是个例子: #文件作用:fgets读取文件 $start_time = microtime(true); $file_name = "a.txt"; $handle = fopen($file_name,'r'); $i = 0; if($handle) { while (!feof($handle)) { $line = fgets($handle); $line = str_replace("\n","

fstream读取文件时如何判断读到文件尾

使用fstream读取文件,什么时候读到文件结束呢.首先想到的是,将现在的位置与文件的长度对比,然后再fstream中无法直接获取文件长度.可以采用如下方法 fstream in; in.open("path",ios::in); in.seekg(0,ios::end); int length=in.tellg(); in.seekg(0.ios::beg); whiel(in.tellg()<length) { dosomething; } 这样是不是有点麻烦,在网上查了一圈

【转】C#读取文件时的共享方式

string sFileName = @"C:\Exchange.dat";System.IO.StreamReader file = new System.IO.StreamReader(sFileName);string sTxt = file.ReadLine();file.Close();在这个代码中,C#读取文件时,默认是Read模式,即它打开文件后,别的应用程序只能读取该文件而不能修改文件. 如果要别的应用程序在它打开该文件的时候也能修改该文件,则需要指定模式为ReadWr

FileSystemWatcher 读取文件时出现被占用的解决方法

今天做一个小程序监控目录并序列化XML时遇到第一次正常,第二个新文件加入时出现文件被占用的错误,记录下解决方法. 1 FileSystemWatcher watcher = new FileSystemWatcher{ 2 Path = path, 3 Filter = filter, 4 EnableRaisingEvents = true, 5 IncludeSubdirectories = true, 6 NotifyFilter = NotifyFilters.Attributes |

StreamReader读取文件时出现乱码的解决方案

今天在做一个打开文件对话框OpenFileDialog时,需要对打开的文件进行读取,显示在在窗体中的RichTextBox中.但是在显示文件时,却发现显示的中文字符串出现乱码.代码的关键部分如下所示: 1 StreamReader sr = new StreamReader(openFileDialog.OpenFile()); 2 string str = sr.ReadToEnd(); 3 childForm.richTextBox1.Text = str; 开始我也想到了是字符编码出了问题

Ajax读取文件时出现的缓存问题

对于Ajax缓存问题时,由于浏览器的版本问题,有时候当服务器端已更改文件中的内容,而客户端并得不到更新后的文件,而是延续之前的文件内容,解决办法是:在读取的文件内容后加一串的地址:JSON的格式为[{a:4,b:5},{c:5,d:6}]这种格式. 比如下面 window.onload=function(){var oBtn=document.getElementById('btn1');oBtn.onclick=function(){ajax('1.txt?t='+new Date().get

php读取文件时多了个%uFEFF[bom字符],怎样去掉?

今天从记事本文件中读取静态生成记录时,发现读出来的第一个链接打开的时候总是提示非法操作,把鼠标放到链接上发现链接的前面多了个%uFEFF, 百度一查,原来这是好多人都有遇到过的bom头问题,特地记录下 解决方法就是直接使用trim函数去除,例如我的代码: $getcon=trim(file_get_contents("./LabT/WebF/View/SaveHtml/fileList.txt"),"\xEF\xBB\xBF");此方法也可以解决json_decod

加载带有手势识别器的XIB文件时的注意事项

首先新建一个继承自UIView的类,并创建相应的XIB文件 #import <UIKit/UIKit.h> @interface ZHDemoView : UIView + (instancetype)demoView; @end 提供一个类方法以供快速创建当前类 在.m中实现类方法,通常从XIB中加载出来的是一个数组,所以用到了lastObject方法 + (instancetype)demoView { NSArray *nibArray = [[NSBundle mainBundle]