流似乎永远不会达到目的

时间:2015-02-21 02:12:08

标签: c

我有一个像这样的流:

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没有用。这里发生了什么?

1 个答案:

答案 0 :(得分:1)

真正的问题是你使用了错误的功能,你不能从用open_memstream()创建的流中读取,这只是为了写作,你需要的是

FILE *fp = fmemopen(buffer, size, "r");

通过这种方式,您可以从buffer阅读,就像它是FILE *信息流一样。

另外,EOF不是char,不是因为例如getchar()返回EOF这意味着它是一个字符,它实际上是一个表示EOF的特殊值。

事实上while (!feof(file)) is always wrong.