freopen의 리턴값이 Null인데 원인이 무엇일까요?


freopen을 했는데, NULL값을 출력합니다. freopen제거하고 scanf로 콘솔창에서는 표준입력이 잘 되는데, freopen를 하면 계속 NULL값을 출력하는데 문제가 무엇일까요?

  1. 프로젝트는 win32 콘솔응용프로그램에서 빈 프로젝트,SDL(Security Development LifeCycle)을 체크했습니다.
  2. input.txt 파일은 프로젝트와 같이 뒀습니다.
  3. #pragma warning(disable:4996)를 추가하였습니다.
  4. 기존 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;
}
  • 2018년 04월 12일에 작성됨

조회수 60


Hashcode banner summercoding

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");
  • 2018년 04월 13일에 작성됨
    코딩 좀 하는 중딩입니다. 저를 프로그래머로 채용하실 생각이 있으시면 꼭 연락주세요.

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close