有任何想法为什么:
#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 :(得分:3)
查看文件p2.out
。通过第二次调用printf
打印的文本就在那里,因为您将标准输出重定向到该文件。没有分段违规。不过好笑话。
答案 1 :(得分:0)
您编写的代码不会导致分段错误(至少对我而言)。不确定它是如何为你做的,除非你还没有表现出来。
请务必查看freopen()
上的一些documentation,特别是有关返回值的部分:
如果文件成功重新打开,则该函数返回作为参数流传递的指针,该指针可用于标识重新打开的流。 否则,返回空指针。 在大多数库实现中,errno变量也会在失败时设置为特定于系统的错误代码。
因此,在使用新重定向的流之前,请确保检查返回值和errno值。可能是您错误的原因。
如果您的代码在行printf("roar");
之前进行了细分,那么这就是您没有看到它的原因。如果它之后发生了分段,那么你的咆哮&#34;应该在文件p2.out
。
重要提示:在您的计划结束时,请记住fclose
stdin
和stdout
!这些内容现在分别重定向到p2.in
和p2.out
,需要在您完成后关闭。