如何使用函数freopen_s

为了从文本文件中读取输入,我编写了以下代码:

int main(){ int x; #ifndef ONLINE_JUDGE freopen("input.txt", "r", stdin); #endif scanf("%d", &x); printf("%d\n", x); system("pause"); return 0; } 

它的效果非常好。

但是,在visual studio中,编译器因为freopen而给我一个错误,并建议我使用freopen_s代替。 我试着理解函数freopen_s是如何工作的,但我不能。 我的代码:

 int main(){ int x; #ifndef ONLINE_JUDGE FILE *stream; freopen_s(&stream, "input.txt", "r", stdin); #endif scanf("%d", &x); printf("%d\n", x); system("pause"); return 0; } 

它不会输出任何内容,甚至“暂停”也不起作用。 程序完成后,cmd会立即消失,不会打印任何内容。 我不知道为什么在freopen_s中使用“stream”。 谢谢你回答我的问题。

我建议你避免使用C风格的I / O库并使用IOSTREAM库。 它更安全,更干净的解决方案。 下面是打开文件并将每行读入“std :: string”对象并在控制台上打印的示例代码。

 int main() { std::string file = "input.txt"; std::string line; std::ifstream text_filestream(file.c_str()); while(std::getline(text_filestream, line)) { std::cout< 

我会给你另一种方式。 如果您仍想使用freopen,可以在终端命令中使用“-D _CRT_SECURE_NO_WARNINGS”此选项,将禁止显示错误消息。

在VS中,您可以在以下链接下添加它 –

项目 – >“项目”属性 – > C / C ++ – >命令行 – >附加选项(右下角的文本框)。

这应该解决问题!