2012-12-21 53 views
1

有任何想法,为什么这样的: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,但现在似乎没有工作,我真的不知道为什么。

+0

这个程序看起来不错。你能告诉哪个'freopen()'导致段错误?理想情况下,您将使用调试器来完成。 – chrisaycock

+0

检查'freopen'的返回值。可能会在预告中遇到一些麻烦? – maverik

+0

这是seg故障的整个代码吗?它似乎为我工作得很好。 – Mike

回答

3

检出文件p2.out。通过第二次调用printf打印的文本在那里,导致您将标准输出重定向到该文件。没有分段违规。好玩笑,但。

0

你写的代码不会导致分段错误(至少对我来说)。不知道它是如何为你做,除非你没有更多的表现。

确保您在freopen()检查出一些documentation,特别是关于返回值的部分:

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

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

如果您的代码在行printf("roar");之前进行了分割,那么这就是您没有看到它的原因。如果在此之后进行了隔断,那么您的“咆哮”应该在文件p2.out中。

一个重要的注意事项:请记住fclosestdinstdout在您的程序结束!这些现在分别重定向到p2.inp2.out,并且在完成后需要关闭。