你知道为什么会这样吗:
#include <stdio.h>
#include <stdlib.h>
int nrpart;
int k;
void main()
{
printf("lol");
freopen("p2.in","r",stdin);
freopen("p2.out","w",stdout);
printf("roar");
}输出只有lol?我曾经使用过freopen,但是现在它似乎不能工作了,我真的不知道为什么。
发布于 2012-12-21 22:13:08
查看文件p2.out。第二次调用printf打印的文本就在那里,这会导致您将标准输出重定向到该文件。没有分割违规。不过,这是个很好的笑话。
发布于 2012-12-21 22:47:47
您所编写的代码不会导致分段错误(至少对我而言)。我不确定它是如何做到这一点的,除非你有更多的东西没有展示出来。
确保您查看了freopen()上的一些documentation,特别是关于返回值的部分:
如果文件成功重新打开,则函数返回作为参数流传递的指针,该指针可用于标识重新打开的流。否则,将返回空指针。在大多数库实现中,errno变量还会在失败时设置为系统特定的错误代码。
因此,在使用新重定向的流之前,请确保检查返回值和errno值。可能是你犯错的原因。
如果您的代码在printf("roar");行之前出现了分段错误,那么,这就是为什么您看不到它的原因。如果在那之后它出现了分段故障,那么你的“咆哮”应该在文件p2.out中。
一个重要的注意事项:记住在程序结束时使用fclose stdin和stdout!它们现在分别被重定向到p2.in和p2.out,并且在您使用它们时需要关闭它们。
https://stackoverflow.com/questions/13991374
复制相似问题