我有一个像这样的流:
FILE *fp;
byte *buf;
size_t len;
fp = open_memstream(&buf, &len);
我写了一些字节。
现在我想要从流的开头到结尾的循环。我有一个类似这样的方法
void method(FILE *fp)
{
while(!feof(fp)){
fread(Buffer, sizeof(byte), BUFSIZE, fp);
}
}
但是while循环永远不会停止。我也明确地试图将EOF char写入fp,但是feof没有用。这里发生了什么?
答案 0 :(得分:1)
真正的问题是你使用了错误的功能,你不能从用open_memstream()
创建的流中读取,这只是为了写作,你需要的是
FILE *fp = fmemopen(buffer, size, "r");
通过这种方式,您可以从buffer
阅读,就像它是FILE *
信息流一样。
另外,EOF
不是char
,不是因为例如getchar()
返回EOF
这意味着它是一个字符,它实际上是一个表示EOF
的特殊值。