VS2022 에러 : C4996 scanf 문제 (+)

꿈별·2025년 4월 16일
0

C++

목록 보기
27/27

VS2022 scanf 에러

  • VS2022 C++ 기준
    비주얼스튜디오에서 scanf 사용시 오류 발생


  • 시도한 방법
  1. ❌ scanf_s 사용하기 : VS에서는 에러가 해결되지만, 백준, 코딩테스트 등 다른 컴파일러에서는 해결이 안 됨

  2. ⭕ 코드 최상단에 #define _CRT_SECURE_NO_WARNINGS 작성하기

#define _CRT_SECURE_NO_WARNINGS

외워야겠다..


ios::sync_with_stdio(false); 문제

  • 코테 문제를 풀 때 실행시간을 단축하기 위해 main 함수 내에 항상 작성해 줬었다.
    cin,cout만 사용해서 코드를 짤 때엔 문제가 없었는데,
    C타입 입력인 scanf를 C++타입 출력인 cout와 혼합해 사용하면서 문제가 생겼다.

  • ios::sync_with_stdio(false); 는 C와 C++의 표준 stream 동기화를 끊는다.
    이 코드를 작성했다면 C++의 버퍼만 사용할 수 있기 때문에 C++ 타입으로만 입출력을 해야 한다.

  • 그런데 비주얼스튜디오에서는 위 코드를 작성한 채로
    C의 scanf + C++의 cout를 함께 실행해도 코드가 멀쩡히 동작했다.
    -> 혹시나 해서 다른 컴파일러에서도 실행시켜 봤더니 역시나 입출력이 제대로 되지 않았다.

    -> 위 : ios::sync_with_stdio(false); 포함 코드
    -> 아래 : ios::sync_with_stdio(false); 삭제 코드


  • 결론
    VS에서 된다고 다른 곳에서도 다 되는 게 아니었다
    상황에 따라 ios::sync_with_stdio(false);를 주의해서 사용하자.

[참고]
https://programmerjoon.tistory.com/4
https://jja2han.tistory.com/149


0개의 댓글