[英]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
stdin
和stdout
! 現在它們分別被重定向到p2.in
和p2.out
並且當你完成它們時需要關閉它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.