freopen의 리턴값이 Null인데 원인이 무엇일까요?
조회수 1286회
freopen을 했는데, NULL값을 출력합니다. freopen제거하고 scanf로 콘솔창에서는 표준입력이 잘 되는데, freopen를 하면 계속 NULL값을 출력하는데 문제가 무엇일까요?
- 프로젝트는 win32 콘솔응용프로그램에서 빈 프로젝트,SDL(Security Development LifeCycle)을 체크했습니다.
- input.txt 파일은 프로젝트와 같이 뒀습니다.
- #pragma warning(disable:4996)를 추가하였습니다.
- 기존 codeblocks를 썼었는데, 지웠습니다. visual studio 버전은 2013 입니다.
초보라 잘 모르겠네요ㅜㅜ 도움 부탁드립니다.
#include <stdio.h>
#pragma warning(disable:4996)
int main(void)
{
int d[20];
if (freopen("input.txt", "r", stdin) == NULL)
fprintf(stderr, "error redirecting stdin\n");
for (int i = 0; i < 20; i++){
scanf("%d", &d[i]);
}
for (int i = 0; i < 20; i++){
printf("%d ", d[i]);
}
printf("\n");
return 0;
}
1 답변
-
freopen("input.txt", "r", stdin);
이라는 코드는 표준 입력 스트림을
input.txt
파일로 바꾼다는 뜻입니다. 그래서 위의 코드에서 새로운 파일 스트림을 리턴할 필요가 없습니다.stdin
이 바뀐 거니까요.그래서 위의 이 코드를
if (freopen("input.txt", "r", stdin) == NULL) fprintf(stderr, "error redirecting stdin\n");
이 코드로 바꿔보세요.
freopen("input.txt", "r", stdin); if (stdin == NULL) fprintf(stderr, "error redirecting stdin\n");
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력