오픈에서 오픈_s로 전환하는 방법
Visual Studio에서 오픈에 대해 불평하고 있습니다.변경하기 위한 올바른 구문을 찾을 수 없습니다.소유자:
FILE *filepoint = (fopen(fileName, "r"));
로.
FILE *filepoint = (fopen_s(&,fileName, "r"));
첫 번째 매개 변수의 나머지는 무엇입니까?
fopen_s
의 "보안" 변형입니다.fopen
모드 문자열에 대한 몇 가지 추가 옵션과 스트림 포인터 및 오류 코드를 반환하는 다른 방법이 있습니다.마이크로소프트에서 개발하여 C 표준에 포함되었습니다. C11 표준의 가장 최근 초안의 부속 문서 K.3.5.2.2에 문서화되어 있습니다.물론 Microsoft 온라인 도움말에 완전히 설명되어 있습니다.C의 출력 변수에 포인터를 전달하는 개념을 이해하지 못하는 것 같습니다.예를 들어, 다음 주소를 전달해야 합니다.filepoint
첫 번째 주장처럼:
errno_t err = fopen_s(&filepoint, fileName, "r");
다음은 완전한 예입니다.
#include <errno.h>
#include <stdio.h>
#include <string.h>
...
FILE *filepoint;
errno_t err;
if ((err = fopen_s(&filepoint, fileName, "r")) != 0) {
// File could not be opened. filepoint was set to NULL
// error code is returned in err.
// error message can be retrieved with strerror(err);
fprintf(stderr, "cannot open file '%s': %s\n",
fileName, strerror(err));
// If your environment insists on using so called secure
// functions, use this instead:
char buf[strerrorlen_s(err) + 1];
strerror_s(buf, sizeof buf, err);
fprintf_s(stderr, "cannot open file '%s': %s\n",
fileName, buf);
} else {
// File was opened, filepoint can be used to read the stream.
...
fclose(filepoint);
}
C99에 대한 Microsoft의 지원은 투박하고 불완전합니다.Visual Studio는 유효한 코드에 대한 경고를 생성하여 표준이지만 선택적인 확장을 사용하도록 강제하지만 이 경우에는 지원하지 않는 것 같습니다.strerrorlen_s
자세한 내용은 MSVC 2017에서 C11 strerrorlen_s 함수 누락을 참조하십시오.
엎친 데 덮친 격으로 Microsoft의 많은 보안 기능 구현은 Annex K에 문서화된 표준 기능과 다른 의미를 가지고 있으며, 이로 인해 다른 시스템은 이러한 기능을 거부하고 구현을 거부했습니다.따라서 휴대성을 위해 이러한 제품은 피하는 것이 좋습니다.
다음과 같은 표준 기능을 사용하려면fopen()
Visual Studio를 사용하면 소스 파일의 시작 부분에서 첫 번째 줄 앞에 이 세 줄을 추가할 수 있습니다.#include
지시:
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
예는 다음과 같습니다.
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
#include <errno.h>
#include <stdio.h>
#include <string.h>
...
FILE *filepoint;
if ((filepoint = fopen(fileName, "r")) == NULL) {
// File could not be opened. filepoint was set to NULL
// error code was stored in errno.
// error message can be retrieved with strerror(err);
fprintf(stderr, "cannot open file '%s': %s\n",
fileName, strerror(errno));
} else {
// File was opened, filepoint can be used to read the stream.
...
fclose(filepoint);
}
언급URL : https://stackoverflow.com/questions/28691612/how-to-go-from-fopen-to-fopen-s
'programing' 카테고리의 다른 글
고정/고정 왼쪽 열과 스크롤 가능한 본문으로 HTML 테이블을 만들려면 어떻게 해야 합니까? (0) | 2023.08.16 |
---|---|
핵심 데이터 기본 키 (0) | 2023.08.16 |
Spring Data JPA - 여러 EnableJpa 저장소 (0) | 2023.08.16 |
파일 저장소로서의 MongoDB (0) | 2023.08.16 |
이미지를 URL에서 Base64로 변환 (0) | 2023.08.16 |