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