加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C – 用fgetc读取文件末尾

发布时间:2020-12-16 07:03:08 所属栏目:百科 来源:网络整理
导读:我发生了最奇怪的事情,我不太确定它为什么会发生.基本上我需要做的是使用fgetc逐字节获取简单ASCII文件的内容.奇怪的部分是它工作,但后来我添加了一些更多的字符,突然间它添加了一个不存在的换行符,并读取文件末尾或其他内容.我所做的一切都是 do { temp = (
我发生了最奇怪的事情,我不太确定它为什么会发生.基本上我需要做的是使用fgetc逐字节获取简单ASCII文件的内容.奇怪的部分是它工作,但后来我添加了一些更多的字符,突然间它添加了一个不存在的换行符,并读取文件末尾或其他内容.我所做的一切都是

do {
    temp = (char*) checked_realloc (temp,n+1);
    e = fgetc(get_next_byte_argument);
    temp[n] = e;
    if (e != EOF)
      n++;
 }
while (e != EOF);

然后检查我只是打印出每个角色

temp_size = strlen(temp)-1;
for(debug_k = 0; debug_k < temp_size; debug_k++){
  printf("%c",temp[debug_k]);
}

并且它会正确输出所有内容,除了它添加了一个不在文件中的额外换行符.在那之前,我有

temp_size = strlen(temp);

但后来它以一些未知的字节(打印出来的胡言乱语)结束了.我尝试strlen(temp)-2以防万一,它适用于那个特定的文件,但后来我添加了一个额外的“a”到最后它再次破坏.

老实说,我很难过.我不知道它为什么这样做.

编辑:checked_realloc只是realloc但快速检查,以确保我没有内存不足.我意识到这不是最有效的方法,但我更担心为什么我似乎神奇地读取额外的字节.

解决方法

编写此类操作的更安全的方法是:

>如果在realloc之前分配内存,则在使用零之前memset内存批量.每次重新分配时,将其初始化为零.
>如果您使用内存来访问字符串或在该内存上使用字符串函数,请始终确保使用NULL字节终止该内存.

do{
    temp = (char*) checked_realloc (temp,n+1);//I guess you are starting n with 0? 
    temp[n]=0;
    e = fgetc(get_next_byte_argument);
    temp[n] = e;
    if (e != EOF)
        n++;
} while (e != EOF);
temp[n]=0;
n=0;

我想上面的代码更改应该可以解决您的问题.你不再需要strlen -1了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读