scanf_s에서 입력에 자꾸 오류가 나타나는데, 어찌 해결해야 할까요?

조회수 380회
      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);처럼 사용한 것과 같습니다. 따라서 이름이 정상적으로 배열에 입력되지 않고, 결국 배열의 쓰레기값을 사용하여 출력하였기 때문에 화면에 이상한 문자가 보인것입니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

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

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

(ಠ_ಠ)
(ಠ‿ಠ)