簡體   English   中英

Freopen導致分段錯誤

[英]Freopen causes segmentation fault

有任何想法為什么這個:

#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值。 可能是您的錯誤的原因。

如果您的代碼在行printf("roar");之前進行了segfaulted printf("roar"); 好吧,這就是為什么你沒有看到它。 如果之后發生了p2.out ,那么你的“咆哮”應該在文件p2.out

重要提示:請記住在程序結束時fclose stdinstdout 現在它們分別被重定向到p2.inp2.out並且當你完成它們時需要關閉它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM