учебник пример fopen не работает - PullRequest
0 голосов
/ 11 октября 2019

Я учусь кодировать и, похоже, у меня проблемы с выполнением учебного примера кода fopen (). Компиляция показывает классическое сообщение «fopen is not secure», но я понимаю, что это не большая проблема, и сообщение с приглашением «увидеть объявление fopen». Это оставляет мне только 3 возможности

  1. коды неверны (очень маловероятно, поскольку это пример из учебника)
  2. синтаксис, который я использовал на fopen, неверен
  3. Iне имеют права на чтение / запись файла
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    FILE* in, * out;

    in = fopen("in.txt", "w+");
    if (in == NULL) {
        perror("Cannot open input file");
        exit(1);
    }

    out = fopen("out.txt", "w+");
    if (out == NULL) {
        fclose(in);
        perror("Cannot open output file");
        exit(1);
    }

    fprintf(out, "abc");
    fclose(in);
    fclose(out);
    return 0;
}

, даже меняя «in.txt» на полный путь «C: /Users/Admin/source/repos/Project3/in.txt»тоже не похоже на помощь. Так что я предполагаю, что это проблемы с разрешениями, но я понятия не имею, как еще повысить статус, потому что я уже использую "w +". im на MS Visual Studio 2019, Windows 10.

Сообщение компилятора выглядит так:

1>Source.c
1>C:\Users\Admin\source\repos\Project3\Project3\Source.c(7,1): error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\stdio.h(208): message : see declaration of 'fopen'
1>Done building project "Project3.vcxproj" -- FAILED.

и выглядит как объявление 'fopen', как предлагалось,

_ACRTIMP FILE* __cdecl fopen(
        _In_z_ char const* _FileName,
        _In_z_ char const* _Mode
        );

Я уже решил проблему, но интересно, что вариант _CRT_SECURE_NO_WARNINGS не работал, например,

#define _CRT_SECURE_NO_WARNINGS

или

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif

, но у меня сработало следующее

#pragma warning(disable : 4996)

вывод: VS2019 имеет проблемы ... ¯_ (ツ) _ / ¯

...