int와 char의 단일 문자 저장
글쓴이: bommy / 작성시간: 일, 2022/04/03 - 1:52오전
안녕하세요!! 교수님께서 아스키 코드의 저장과 출력에 대하여 수업하셨는데,
몇 가지 궁금증이 생겨 질문합니다!
int num5 = 'a';
printf("%c, %d", num5, num5);
위 경우, int에 a가 저장되고, 각각 a, 97이라는 값을 출력해줍니다
int num1;
scanf("%c", &num1);
printf("%c, %d\n", num1, num1);
하지만, 이 경우처럼 값을 입력 받는 예제를 만드는 경우에는 단일 문자를 출력하는 데에는 문제가 없으나
숫자를 출력하지는 못합니다... 혹시 scanf함수를 이용하는 경우, 단일 문자를 받을 때 int 자료형 대신에 무조건 char 자료형을 써야 할까요??
====================================================================
char num2;
scanf("%d", &num2);
printf("%c, %d", num2, num2);
위의 예제처럼 char에 숫자를 입력하고, 이것을 단일 문자/숫자로 출력하라는 코드를 작성하는 경우,
정상적으로 출력이 되지만 첨부된 파일처럼 오류가 발생합니다.. 왜 이러는 걸까요??
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 12.94 KB |
Forums:
int가 4byte인 환경이라 가정하면,
int가 4byte인 환경이라 가정하면,
scanf("%c", &num1);
의 경우 문자를 하나 입력을 받아서 num1의 4byte 중 1byte만 수정합니다. 그래서 num1의 기존 값의 3byte랑 섞인 값이 printf의 %d로 출력될겁니다.
num2는 1byte 변수인데, scanf에서 %d를 사용하면 변수 크기를 넘어선 영역에 메모리 쓰기를 시도할 겁니다. 그래서 Visual Studio에서 메모리 침범을 체크하는 코드가 발동한 것 같네요.
댓글 달기