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

조회수 1284회

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;
}

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");
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)