1

有任何想法为什么会这样:

#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 ,但它现在似乎不起作用,我真的不知道为什么。

4

2 回答 2

3

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

于 2012-12-21T14:13:08.207 回答
0

您编写的代码不会导致分段错误(至少对我而言)。除非您没有展示更多内容,否则不确定它是如何为您做到的。

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

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

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

如果您的代码在 line 之前出现段printf("roar");错误,那么这就是您没有看到它的原因。如果之后出现段错误,那么您的“咆哮”应该在文件中p2.out

一个重要的提示:记住在你fclose stdinstdout程序结束时!这些现在分别重定向到p2.inp2.out并且需要在您完成它们时关闭。

于 2012-12-21T14:47:46.513 回答