【问题标题】:error while compiling ‘fopen_s’ was not declared in this scope编译“fopen_s”时的错误未在此范围内声明
【发布时间】:2021-05-13 05:43:39
【问题描述】:

VS 和 CODEBLOCKS 编译运行良好。当我尝试 Dev c++ 或 Online GDB 时出现错误。

// Ex7.cpp : This file contains the 'main' function. Program execution begins and ends there.
//
#include <iostream>
#include <fstream>
#include <string>
#include <list>

using namespace std;

//ASKISI 1
int getMedian(int arr[]);
//ASKISI 2

int main()
{
    int arr[9];

    for (int i = 0; i < 9; i++)
    {
        std::cout << "Enter num " << i << ": ";
        std::cin >> arr[i];
    }

    std::cout << "\nMedian of array is: " << getMedian(arr) << "\n\n";

    string line;
    int len = 0;

    ifstream myfile("myfile2.txt");
    if (myfile.is_open())
    {
        while (getline(myfile, line))
        {
            cout << line << '\n';
            len += line.length();
        }

        myfile.close();
    }
    else
        cout << "Unable to open file";

    getchar();

    int c;
    cout << "\nEnter char: ";

    c = getchar();
    if (c == 101)
    {
        FILE* f;
        fopen_s(&f, "myfile2.txt", "rb");

        fseek(f, 0, SEEK_END);
        long fsize = ftell(f);
        fseek(f, 0, SEEK_SET);

        char* string = (char*)malloc(fsize + 1);
        fread(string, fsize, 1, f);

        fclose(f);

        string[fsize] = 0;
        int sum = 0;
        int cnt = 0;;
        int len = sizeof(string) / sizeof(*string);

        for (int i = 0; i < len - 1; i++)
        {
            sum += string[i] + string[i + 1];
            cnt++;
        }
        cout << "\nAverage 1+2nd: " << sum / cnt << "\n" << endl;

        cnt = 0;
        for (int i = 0; i < len - 2; i++)
        {
            sum += string[i] + string[i + 2];
            cnt++;
        }
        cout << "\nAverage 1+3nd: " << sum / cnt << "\n" << endl;

        cnt = 0;
        for (int i = 0; i < len - 3; i++)
        {
            sum += string[i] + string[i + 3];
            cnt++;
        }
        cout << "\nAverage 1+3nd: " << sum / cnt << "\n" << endl;

        int i = 0, alphabet[26] = { 0 }, j;
        while (string[i] != '\0')
        {
            if (string[i] >= 'a' && string[i] <= 'z')
            {
                j = string[i] - 'a';
                ++alphabet[j];
            }
            ++i;
        }

        cout << "Frequency of all alphabets in the string is:" << endl;

        for (i = 0; i < 26; i++)
            cout << char(i + 'a') << " : " << alphabet[i] << endl;

        ofstream fout("ex3.txt");
        if (!fout)
        {
            cerr << "Could not open file." << endl;
            return 1;
        }

        for (i = 0; i < 26; i++)
        {

            fout << char(i + 'a') << " : " << alphabet[i] << endl;
        }

        fout.close();
    }
}

int getMedian(int arr[])
{
    return arr[5];
}

【问题讨论】:

  • 什么错误?提供信息是解决问题的重要部分。你的getMedian() 不好。它仅在数组具有特定大小时才有效,而不是您创建的大小。你会想要你的第五个元素,它位于索引 4 处。但只需传递大小并找出它应该是什么元素。程序本身也太分散了。
  • @sweenish 你为什么不建议解决方案而不是判断代码?写一些更好的东西并发布它,这样你就可以真正提供帮助。
  • 什么解决方案?你没有充分描述你的问题。您的问题已被标记为重复,这意味着您在提问之前没有进行足够的研究。我很乐意提供帮助,但首先需要您提供足够的信息。我们无法读懂你的想法。你读过How to Ask吗?你读过minimal reproducible example吗?你拍过tour吗?

标签: c++ visual-studio codeblocks dev-c++


【解决方案1】:

fopen 更改为fopen_s

像这样: errno_t err = fopen_s(&f, "myfile2.txt", "rb");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 2011-10-08
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多