c++ 왕초보 scanf_s C6066, C6273, C6328 오류 질문

조회수 4204회

정확하지 않은 제목 죄송합니다. 주제를 뭐라고 해야 할지 모르겠어서..

#include <iostream>
using namespace std;
int main() {
    cout << " 입력한 '두' 어절을 그대로 복사합니다. 두 어절만 쓰세요. \n"<< endl;
    char a1[1000] = { 0 };
    char a2[1000] = { 0 };
    cin >> a1 >> a2;
    cout << a1 << " " << a2 << endl;
}

이렇게 visual studio에 입력하면 아무 오류 또는 경고 없이 잘 실행이 됩니다.

그런데

#include <stdio.h>

int main() {

    printf("입력한 '두' 어절을 그대로 복사합니다. 두 어절만 쓰세요.\n");
    char a1[1000] = { 0 };
    char a2[1000] = { 0 };
    scanf_s("%s %s",a1,a2,sizeof(a1),sizeof(a2));
    printf("\n%s %s", a1, a2);

}

이렇게 입력하면

C6066 : 포인터가 아닌 항목이 _Param_(4)로 전달되었습니다.
C6273 : 정수가 아닌 항목이 _Param_(3)으로 전달되었습니다.

이미지

C6328 : 크기 불일치: 'unsigned __int64'이(가) _Param_(5)으로 전달되었습니다.

이미지

이렇게 경고는 많이 뜨지만 오류없이 실행은 잘 됩니다.

같은 입력인데 하나는 정상이고 하나는 많이 경고나는 이유가 무엇인지 궁굼하여 질문드립니다

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    질문에서 두번째 코드가 경고는 뜨지만 오류없이 실행은 잘된다고 하셨는데. 오류 문구가 뜨지 않아서 오류가 없다고 생각하신것 같은데, 두 번째 프로그램은 정상적으로 동작하지 않고 프로그램이 오류로 종료됩니다.

    아래 문장에 오류가 있습니다.

    scanf_s("%s %s", a1, a2, sizeof(a1), sizeof(a2));
    

    위 문장을 아래와 같이 바꾸셔야 합니다.

    scanf_s("%s %s", a1, sizeof(a1), a2, sizeof(a2));
    
    • 결과

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 아.. 한꺼번에 몰아서 쓰는줄 알았는데 아니었군요.. 감사합니다 koladuckhu 2021.12.6 22:49

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

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

(ಠ_ಠ)
(ಠ‿ಠ)