首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Freopen导致分段故障

Freopen导致分段故障
EN

Stack Overflow用户
提问于 2012-12-21 21:50:23
回答 2查看 1.1K关注 0票数 1

你知道为什么会这样吗:

代码语言:javascript
复制
#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,但是现在它似乎不能工作了,我真的不知道为什么。

EN

回答 2

Stack Overflow用户

发布于 2012-12-21 22:13:08

查看文件p2.out。第二次调用printf打印的文本就在那里,这会导致您将标准输出重定向到该文件。没有分割违规。不过,这是个很好的笑话。

票数 3
EN

Stack Overflow用户

发布于 2012-12-21 22:47:47

您所编写的代码不会导致分段错误(至少对我而言)。我不确定它是如何做到这一点的,除非你有更多的东西没有展示出来。

确保您查看了freopen()上的一些documentation,特别是关于返回值的部分:

如果文件成功重新打开,则函数返回作为参数流传递的指针,该指针可用于标识重新打开的流。否则,将返回空指针。在大多数库实现中,errno变量还会在失败时设置为系统特定的错误代码。

因此,在使用新重定向的流之前,请确保检查返回值和errno值。可能是你犯错的原因。

如果您的代码在printf("roar");行之前出现了分段错误,那么,这就是为什么您看不到它的原因。如果在那之后它出现了分段故障,那么你的“咆哮”应该在文件p2.out中。

一个重要的注意事项:记住在程序结束时使用fclose stdinstdout!它们现在分别被重定向到p2.inp2.out,并且在您使用它们时需要关闭它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13991374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档