| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 508 人关注过本帖
标题:对于不确定字符串长度时,各位大佬有什么好方法将其读入内存。fread和fgets ...
只看楼主 加入收藏
NullUser
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2023-9-6
结帖率:0
收藏
 问题点数:0 回复次数:3 
对于不确定字符串长度时,各位大佬有什么好方法将其读入内存。fread和fgets都有大小限制
文件内容如下:
DeleteFileList:

C:\Users\znypp\Desktop\Learn\temp\11.txt

C:\Users\znypp\Desktop\Learn\temp\22.txt

C:\Users\znypp\Desktop\Learn\temp\222.txt
从第二行开始,一行一行读,大佬们有什么骚操作吗?


[此贴子已经被作者于2023-9-27 16:02编辑过]

搜索更多相关主题的帖子: txt Users temp Desktop 定时 
2023-09-27 15:59
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1685
专家分:4252
注 册:2007-12-27
收藏
得分:0 
应帖主要求,正规操作不予考虑。
第一式,化整为零。
可以读入一层,就CD一层,CD下一层,就抛弃上一层。
第二式,金蝉脱壳。
写一个shell脚本/批处理文件干这个活,程序里简单调用一下。
第三式,掩耳盗铃。
找到路径中的mount point,umount it。眼不见,心不烦。


对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2023-09-28 09:45
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
未验证其正确性

程序代码:
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

bool getline( FILE* file, char** pbuf, size_t* pbuf_size )
{
    char* buf = *pbuf;
    size_t buf_size = *pbuf_size;

    enum { INITIAL_SIZE = 260 };
    bool result = false;
    for( size_t valid_size=0; ; )
    {
        if( buf_size==0 || valid_size!=0 )
        {
            buf_size = buf_size==0 ? INITIAL_SIZE : 2*buf_size;
            char* buf_new = realloc( buf, buf_size );
            if( !buf_new )
                return false;
            buf = buf_new;
        }

        char* r = fgets( buf+valid_size, buf_size-valid_size, file );
        if( !r )
            break;

        valid_size += strlen( buf+valid_size );
        if( buf[valid_size-1] == '\n' )
        {
            buf[valid_size-1] = '\0';
            result = true;
            break;
        }
       

        if( feof(file) )
        {
            result = true;
            break;
        }
    }

    *pbuf = buf;
    *pbuf_size = buf_size;
    return result;
}

int main( void )
{
    FILE* file = fopen( "D:/sources/Cpp005/test.txt", "rt" );
    if( !file )
    {
        puts( "文件打开失败." );
        return 1;
    }

    char* buf = NULL;
    size_t buf_size = 0;
    for( ; getline(file,&buf,&buf_size); )
    {
        puts( buf );
    }
    free( buf );
    if( !feof(file) )
    {
        puts( "文件读取失败." );
        return 2;
    }

    fclose( file );
    return 0;
}

2023-09-28 10:01
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:566
专家分:3690
注 册:2019-7-29
收藏
得分:0 
先获取文件大小,申请动态内存,然后进行分段读取。

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2023-10-04 10:40
快速回复:对于不确定字符串长度时,各位大佬有什么好方法将其读入内存。fread和 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030371 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved