2015-04-23 1 views
2

Я пытаюсь создать файл и записать на него некоторые данные, но при запуске следующей программы кода запускается ошибка: Ошибка 1 ошибка C2664: 'errno_t fopen_s (FILE **, const char *, Const символ *)»: не удается преобразовать аргумент 1 из 'FILE *' до 'FILE **'Прочитать ошибку файла C_language

#include "stdafx.h" 
#include <stdio.h> 
#include <stdlib.h> 

FILE *myFile; 


int main() 
{ 
    int age; 
    age = 24; 
    fopen_s(myFile,"C:\\inetpub\\wwwroot\\DATA.EMP", "w"); 
    if (myFile == 0){ 
     printf("Error opening the file\n"); 
     exit(1); 
    } 
    fprintf(myFile, "I am %d years old \n", age); 
    fclose(myFile); 

    getchar(); 
    return 0; 
} 

, что может быть причиной?

+0

Ошибка компилятора говорит вам довольно четко. 'fopen_s' ожидает arg 1 типа' FILE ** ', и вы даете ему' FILE * '. Попробуйте с первым arg' & myFile'. – kaylum

+0

Я понимаю, я уже объявлен как FILE ** myFile; но это дает мне еще одну ошибку Degub Assertion! программа: .... al studio 2013 \ projects \ file_pointer1 \ debug \ file_pointer1.exe Файл: f: \ dd \ vctools \ crt \ stdio \ fopen.c Строка: 159 Выражение: (pfile! = NULL) # включая #include FILE ** myFile; int main() { \t int age; \t возраст = 24; \t fopen_s (myFile, "C: \\ inetpub \\ wwwroot \\ DATA.EMP", "w"); \t if (myFile == 0) { \t \t printf ("Ошибка открытия файла \ n"); \t \t выход (1); \t} \t fprintf (* myFile, "Я% d лет \ n", возраст); \t fclose (* myFile); \t getchar(); \t возвращение 0; } – JFC

+0

Нет, не делайте этого! Это будет скомпилировано, но будет работать во время выполнения, как вы выяснили. Вызов fopen_s будет отменять первый аргумент. Вы должны дать ему указатель на выделенную память. Сделав вашу переменную 'ФАЙЛ **', вы передаете недопустимый указатель на fopen_s. Сделайте то, что было предложено: объявите как 'FILE *' и передайте '& myFile' в' fopen_s'. И вы, вероятно, захотите освежить указатели, прежде чем продолжить. – kaylum

ответ

1

https://msdn.microsoft.com/en-us/library/z5hh6ee9.aspx

errno_t fopen_s( 
    FILE** pFile, 
    const char *filename, 
    const char *mode 
); 

Таким образом, ваш код должен быть:

fopen_s(&myFile,"C:\\inetpub\\wwwroot\\DATA.EMP", "w"); 

нотабене & myFile.

И проверьте свое возвращаемое значение.

+0

Спасибо, я пропустил это, я должен ссылаться на адрес переменной, где будут храниться данные – JFC