chlghtjd00   2년 전

어디가 잘못된 건지를 모르겠어요

bamgoesn   2년 전

일단 반례는 제일 밑에 적어놓습니다. 다만 아래는 로직 오류로 인한 것이 아닌, 정의되지 않은 동작이 발생했기 때문으로 보입니다.

우선 문자열은 char 배열에 저장되는데, 이때 문자열의 끝에는 널문자 '\0'가 들어갑니다. 따라서 길이 3의 문자열을 입력받기 위해선 3보다 긴 크기의 char 배열을 초기화해야 합니다.

이 얘기만 들으면 크기가 4면 충분할 것 같지만, 정확한 건 모르겠으나 간혹 2~3칸을 더 늘려야 하는 경우도 있다고 하더라고요. 그냥 안전하게 10정도 더 많이 할당해주면 될 것 같습니다. 메모리 차이가 어차피 많이 안 나니까요.

그리고, scanf로 문자열을 읽을 땐 문자열 배열에 &를 붙이지 않습니다. 배열 변수 자체가 메모리상에서 배열의 시작점이 위치하는 곳을 가리키고 있기 때문에 그 배열을 역참조하지 않는 게 맞습니다. 아마 컴파일러가 경고를 뱉으면서도 정상적으로 작동하긴 할텐데, 기왕이면 컴파일 경고는 꼭 신경써주는 게 안전합니다. 정의되지 않은 작동을 피할 수 있기 때문이에요.

댓글을 작성하려면 로그인해야 합니다.