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 답변
-
질문에서 두번째 코드가 경고는 뜨지만 오류없이 실행은 잘된다고 하셨는데. 오류 문구가 뜨지 않아서 오류가 없다고 생각하신것 같은데, 두 번째 프로그램은 정상적으로 동작하지 않고 프로그램이 오류로 종료됩니다.
아래 문장에 오류가 있습니다.
scanf_s("%s %s", a1, a2, sizeof(a1), sizeof(a2));
위 문장을 아래와 같이 바꾸셔야 합니다.
scanf_s("%s %s", a1, sizeof(a1), a2, sizeof(a2));
- 결과
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력