인프런 커뮤니티 질문&답변

semu0523님의 프로필 이미지
semu0523

작성한 질문수

독하게 시작하는 C 프로그래밍

필수 실습문제 1

해결된 질문

작성

·

159

·

수정됨

0

안녕하세요

독하게 시작하는 C언어 프로그래밍 필수 실습문제 1번 질문있습니다.

 

문제는 나이와 이름을 입력받아 출력하는 문제인데요

저는 이름을 입력받을 문자배열을 선언할때 어떤 길이가 나올지 모르니 최대한 많은 공간을 미리 확보하기 위해 char ch[ ] = {0}; 으로 선언했는데 이렇게 하면 오류가 뜨고 선생님처럼 char ch[32] = {0}; 문자배열의 길이를 선언해야 오류 없이 실행되더라구요

문자배열을 어느 길이로 입력 받을 지 모르니 저처럼 설정하면 왜 안되는 걸까요?

또한 scanf_s("%d%c", %x); 구문에서 입력받은 변수가 int 형으로 정수를 입력 받았는데

그럼 scanf_s("%d%d", %x); 이렇게 입력해야 맞는 것 아닌가요?

왜 scanf_s("%d%c", %x); 이렇게 입력해도 실행이 되는 지 궁금합니다

답변 1

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

배열을 선언할 때 요소의 개수를 기술하지 않을 경우 초깃값을 분석해 컴파일러가 알아서 요소의 개수를 정합니다. 즉, 기술하지 않았다 하더라도 결과적으로는 써준 것처럼 컴파일 됩니다. C언어에서는 문자열 입력을 char 배열로 받으려면 반드시 초깃값을 기술해 메모리 크기가 명확히 특정되어야 합니다.

그리고 scanf_S() 함수에서 형식문자에 사용된 * 기호의 의미는 해당 형식을 찾아 입력버퍼에서 제거하는 기능을 수행합니다. 이에 대해서는 표준 입/출력에 관한 강의를 참고하시기 바랍니다. 짧게 댓글로 답변하기가 어렵기 때문입니다. 참고하시기 바랍니다. 😄

semu0523님의 프로필 이미지
semu0523

작성한 질문수

질문하기