Freopen导致分段错误

时间:2012-12-21 13:50:23

标签: c segmentation-fault freopen

有任何想法为什么:

#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");
}

仅输出大声笑?我曾经使用过freopen,但现在似乎没有工作,我真的不知道为什么。

2 个答案:

答案 0 :(得分:3)

查看文件p2.out。通过第二次调用printf打印的文本就在那里,因为您将标准输出重定向到该文件。没有分段违规。不过好笑话。

答案 1 :(得分:0)

您编写的代码不会导致分段错误(至少对我而言)。不确定它是如何为你做的,除非你还没有表现出来。

请务必查看freopen()上的一些documentation,特别是有关返回值的部分:

  

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

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

如果您的代码在行printf("roar");之前进行了细分,那么这就是您没有看到它的原因。如果它之后发生了分段,那么你的咆哮&#34;应该在文件p2.out

重要提示:在您的计划结束时,请记住fclose stdinstdout!这些内容现在分别重定向到p2.inp2.out,需要在您完成后关闭。