при попытке записать файл fprintf не работает - PullRequest
3 голосов
/ 22 февраля 2020

Я просто пытаюсь что-то открыть и записать в файл, но когда Visual Studio пытается выполнить fprintf, происходит сбой программы, вот мой код

#include<stdlib.h>
int main()
{
    FILE* fPointer;
    fPointer = fopen_s(&fPointer,"‪C:\\asd.txt","w");
    fprintf(fPointer, "If ı can read this then ı can create for loop");
    fclose(fPointer);
    return 0;
}

, вот сообщение об ошибке: Access violation writing location 0x0000003A.

Ответы [ 3 ]

4 голосов
/ 22 февраля 2020

fopen_s возвращаемое значение - это номер ошибки, и вы перезаписываете указатель файла тем, что не следует делать.

3 голосов
/ 22 февраля 2020

В отличие от fopen, который возвращает тип данных FILE *, функция fopen_s возвращает тип данных errno_t.

В опубликованном вами коде вы передаете адрес переменной fPointer в функцию fopen_s, чтобы она записывала эту переменную. Это правильно. Однако впоследствии вы явно назначаете возвращаемое значение функции fopen_s (которая имеет тип errno_t) переменной fPointer, тем самым перезаписывая то, что ранее было записано в эту переменную функцией fopen_s. Этого не следует делать, так как тип данных errno_t имеет значение, отличное от типа данных FILE *.

Кроме того, как правило, вы всегда должны проверять, был ли файл успешно открыт перед используйте FILE *.

Поэтому вы должны изменить свой код на что-то вроде следующего:

#include <stdlib.h>

int main()
{
    FILE* fPointer;
    errno_t err;

    err = fopen_s(&fPointer,"‪C:\\asd.txt","w");
    if ( err == 0 )
    {
        fprintf(fPointer, "If ı can read this then ı can create for loop");
        fclose(fPointer);
    }
    else
    {
        fprintf( stderr, "Error opening file!\n" );
    }

    return 0;
}
0 голосов
/ 22 февраля 2020

fopen_s возвращает код ошибки, если не удалось создать указатель файла. Перед использованием указателя файла необходимо проверить значение ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...