为什么 freopen() 不适用于 Microsoft Visual Studio 但适用于 CodeBlocks?

why is freopen() not working on Microsoft Visual Studio but working on CodeBlocks?

我开始使用 C++ 的时间不长,并且努力寻找不同的方式来读取和写入 from/to 文件,但没有结果,直到我在 CodeBlocks 上尝试了它才有效。下面附有图像以指出可能的情况尽管两个应用程序使用了相同的代码,但代码中存在错误。

错误代码: Severity Code Description Project File Line Suppression State Suppression State Error C4996 'freopen': This function or variable may be unsafe. Consider using freopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. Codeforces C:\Users\owamoyo\source\repos\Codeforces\Codeforces.cpp 6

#include<bits/stdc++.h>

using namespace std;

int main() {
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    int n; cin >> n;
    while (n--) {
        int x; cin >> x;
        cout << x << " ";
    }
    return 0;
}

#include<bits/stdc++.h>

using namespace std;

int main() {
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    int n; cin >> n;
    while (n--) {
        int x; cin >> x;
        cout << x << " ";
    }
    return 0;
}

只需使用freopen_s 要么 转到 Project->Properties->Configuration Properties->C/C++->Preprocessor->Preprocessor Definitions 并添加 _CRT_SECURE_NO_WARNINGS

示例:

FILE *input;

errno_t e = freopen_s(&input, "input.txt", "w", stdin);
if(e)
    /* Handle that error(cannot reopen) */;

...

fclose(input);
  • 首先将此添加到您的代码中
#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>
#include<stdlib.h>
  • 然后将 input.inoutput.out 添加到您的项目中
  • 然后右键单击解决方案资源管理器并 select
    • 属性
      • 配置
        • C/C++
          • 预处理器 然后编辑 Preprocessor Definitions 并将其更改为 _CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)

Steps