1

Тема: Робота з файлами

//Написати програму, яка читає текст з файлу та переписує його в інший
//файл, щоразу замінюючи літеру «о» на знак «*».
#include "pch.h"
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>

int main()
{
    FILE *f, *res;
    char s;
    f = fopen("in.txt", "r");
    res = fopen("out.txt", "w");
    while (!feof(f))
    {
        fscanf(f, "%c", &s);
        if (s == 'o')
        {
            fprintf(res, "%c", '*');
        }
        else 
        {
            fprintf(res, "%c", s);
        }
    }
    fclose(f);
    fclose(res);
    return 0;
}

Програма працює, але післа запуску зразу спрацьовує Захисник Windows 10 з повідомленням про ураження файлів, що знаходяться в папці коду програми. Можете пояснити де я накосячив??

2

Re: Робота з файлами

Ви ніде не накосячили. Добавте папку в "білий список" захисника (щоб не провіряв там файли). Перевірте, чи включений захист від шифрувальників. Тому що повідомлення може бути двох типів - або еврістичний детект невідомого софту, або доступ до файлів які находяться в захищенній папці (документи чи що там ще).

3

Re: Робота з файлами

grinyuk309 написав:
#include "pch.h"
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>

Програма працює, але післа запуску зразу спрацьовує Захисник Windows 10 з повідомленням про ураження файлів

:) Не думав, що колись скажу таке, але це той випадок, коли Defender правий.


grinyuk309 написав:

Можете пояснити де я накосячив??

Ось тут

#include "pch.h"
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>

В 4-х рядках 4+ помилки.

4

Re: Робота з файлами

leofun01, в чому помилки, це ж не продакшн. Для себе можна як хоч писати, я також часто пишу _CRT_SECURE_NO_WARNINGS , тому що нова студiя так хоче. Чи ви про мiшанину хiдерiв С i С++ ? Але - див. вище..

5

Re: Робота з файлами

grinyuk309 написав:

де я накосячив??

Це не ви, це в антивірусу параноя.

6

Re: Робота з файлами

itakal написав:

в чому помилки, це ж не продакшн.

А потім подібні куски коду потрапляють в продакшн, зі словами "в чому помилки ?, це ж не комерційний продукт."...

itakal написав:

Для себе можна як хоч писати

Ясно. Зрозуміло.

itakal написав:

я також часто пишу _CRT_SECURE_NO_WARNINGS , тому що нова студiя так хоче.

Буду мати на увазі. Це вам студія так сказала ?
А може студія просила використовувати альтернативні функції ?
В будь-якому випадку цей кусок _CRT_SECURE_NO_WARNINGS має бути не в коді програми.

itakal написав:

Чи ви про мiшанину хiдерiв С i С++ ? Але - див. вище.

І про це теж. ¿ Ви взагалі помітили, що в коді не використовуються потоки (iostream) ?

Подякували: koala, wander2

7

Re: Робота з файлами

grinyuk309, моя вам порада - викладайте наступного разу код без хiдерiв, сам алгоритм).

leofun01, я не хочу дискутувати на пустому мiсцi, просто бувають моменти, коли пишеш невеликий алгоритм, РоС, i не хочеться заморочуватись як правильно чи як безпечно. Написав i добре, буде продакшн, буде iнша розмова. Тай продакшн в конторi це одне, а на фрiлансi iнше. У мене друг якось прийшов, вiн робить в бiлiй конторi в реалi. Дивувався, нащо менi книжка по jQuery, щей 1.1, що воно вмерло 10 рокiв назад, викинь на макулатуру. А менi що - заказчику треба, щоб працювало, i jquery справляеться там, а то шо воно постарiло чи немодно - що з того? Deprecated моменти я подивлюсь на сайтi, якщо треба, а основна суть не помiнялась.

Буду мати на увазі. Це вам студія так сказала ?

Не студiя. Я не так виразився, i ви це зрозумiли. Студiя заблокувала "небезпечнi" функцii. Якщо у них параноя, то це проблеми студiї, не мої. Можна взяти альтернативний компiлятор чи написати на ассемблерi. Хоча, з точки зору майкрософт, на ассемблерi взагалi не можна писати, бо там весь код "небезпечний".

Ви взагалі помітили, що в коді не використовуються потоки (iostream)

Так, я помiтив що потоки не використовуються, i що precompiled headers (не знаю, як по укр.) також тут неясно до чого. По факту, С++ заголовки треба видалити, а файл перейменувати на Сi, i було би норм.

8 Востаннє редагувалося wander (22.04.2020 11:57:59)

Re: Робота з файлами

itakal написав:

Для себе можна як хоч писати, я також часто пишу _CRT_SECURE_NO_WARNINGS , тому що нова студiя так хоче.

Це, звісно, нісенітниця, студія нічого такого не хоче. Просто й досі існує застарівший "багаж" С-функцій, які були написані у ті самі древні часи, коли трава була зеленіша, а по землі ходили динозаври. Все, що зробила студія, так це оголосила такі функції застрарілими та небезпечними (на що були причини), щоб всякі бовдури не повідстрілювали собі ноги.
Наприклад, візьмемо функцію scanf - яка є якраз такою, що підпадає під заборону, проте це не означає, що потрібно одразу бігти відключати всі попередження, бо сам дурак, ні. Для цього є спеціальний набір "безпечних" функцій з приставкою _s в кінці, типу scanf_s.

Мало того, ці функції були признані небезпечними також комітетом зі стандартизації, а їх безпечні версії є стандартизованими. Тому претензій до "студії" бути не може.

Не по темі:

itakal написав:

По факту, С++ заголовки треба видалити, а файл перейменувати на Сi, i було би норм.


Надіюся, ми доживемо до того моменту, коли в нас буде два окремих розділи для С та С++.

Подякували: leofun011