作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的文件没有任何换行符。它是字节流的连续文件。假设整个文件大小为 100Kb。如果第 n 个 Kb 具有“0A”,则文件读取将以此终止(使用 fseek 检查,即使我给出了 n+10 个字节,它也会以第 n 个字节停止),即使它不是实际的换行符。我想完整地阅读 100Kb。怎么做?
我正在使用 fgets 来读取文件。
最佳答案
显示您的代码。
您不能使用字符串函数来读取二进制数据,当然它们会像输入是字符串一样使用react。
当然是在分配缓冲区之后使用fread()
。
典型的尝试可能是这样的:
void * load_file(const char *filename, size_t *length)
{
FILE * const f = fopen(filename, "rb");
if (f == NULL)
return NULL;
void *buf = NULL;
if (fseek(f, 0, SEEK_END) == 0)
{
const long size = ftell(f);
if (fseek(f, 0, SEEK_SET) == 0)
{
if ((buf = malloc(size)) != NULL)
{
const size_t got = fread(buf, size, 1, f);
if (got < size)
{
free(buf);
buf = NULL;
}
else if (length != NULL)
*length = size;
}
}
}
fclose(f);
return buf;
}
以上内容未经测试,但应该作为一个不错的轮廓。
当然,调用者在使用完缓冲区后必须free()
缓冲区。
关于c - 如果换行符 '0A' 是文件的一部分,如何读取完整文件。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52532281/
我是一名优秀的程序员,十分优秀!