scanf_s에서 입력에 자꾸 오류가 나타나는데, 어찌 해결해야 할까요?
조회수 115회
char name[256];
printf("이름이 뭐에요? ");
scanf_s("%s", name,sizeof(name));
로 하면 제대로 실행은 되지만,c4477,c6328 오류가 나타납니다 그래서
char name[256];
printf("이름이 뭐에요? ");
scanf_s("%s", name,(unsigned char)sizeof(name));
를 사용하면 오류가 뜨진 않지만 실행할때 문자가 이상하게 뜹니다
오류도 안 발생하고 실행할때도 제대로 되려면 어떻게 해야할까요?
1 답변
-
질문에서 아래 블록은 정상적인 코드입니다. 문자열 입력은 정상적으로 동작한 것입니다.
char name[256]; printf("이름이 뭐에요? "); scanf_s("%s", name,sizeof(name));
c4477과 c6328 오류는 scanf_s함수에서 발생하는 것이 아니고, 저장된 이름을 출력하거나 사용하는 다른 함수에서 인수 타입 지정 등을 잘못하여 발생한 것입니다. scanf_s 함수가 아닌 다른 함수를 살펴보시길 바랍니다.
char name[256]; printf("이름이 뭐에요? "); scanf_s("%s", name,(unsigned char)sizeof(name));
한편, 위 블록에서 문제가 발생하는 이유를 설명 드립니다. name의 크기가 256입니다.
sizeof(name)
은 256을 반환하는데 그것을 형변환 연산(unsigned char)
을 하고 있습니다. unsigned char형은 0~255의 값만 저장할수 있으므로 256은 0으로 앞단의 값이 잘려버린것입니다. 결국scanf_s("%s", name, 0);
처럼 사용한 것과 같습니다. 따라서 이름이 정상적으로 배열에 입력되지 않고, 결국 배열의 쓰레기값을 사용하여 출력하였기 때문에 화면에 이상한 문자가 보인것입니다.
댓글 입력