slowbooktech   2년 전

안녕하세요, 정답은 맞았는데 다음과 같은 사항이 궁금해 질문드립니다.

1. strlen

아래 코드 실행시 반환값이 0이 아닐수있다는 경고가 계속 뜹니다. 이는 입력받은 문자열이 \0으로 끝나지 않을 수 있어서 그런것인가요? 코드 자체에서 수정해 해당 경고문이 안뜨도록 할 수는 없죠?


2. 출력결과

preview

첨부드린 이미지처럼 마지막에 '-858993469'같은 말도안되는 숫자가 나오는데, 백준 프로그램에서 왜 맞았다고 채점되는지 모르겠습니다. 마지막에 쓰레기값이 들어가는 이유도 모르겠습니다. 무엇을 놓쳤는지 궁금합니다. 혹은 출력 결과가 예제에서 요구한 것처럼 나오게 하려면 코드를 어떻게 수정해야할까요?

zenith82114   2년 전

1.

네. strlen이 그냥 '\0' 나올 때까지 무작정 읽는 불안한 함수라서 Visual Studio가 띄우는 경고인데,

최대 길이도 같이 받아서 그때까지 '\0'이 안 나오면 받았던 최대 길이를 도로 리턴하는 strnlen 함수가 있는데

이걸 써보시는 건 어떨까요.

2.

첨부하신 코드를 제 환경에서 돌렸을 때는 이상한 값은 안 나옵니다.

저는 안 써서 모르겠지만 Visual Studio라서 나타나는 이상한 현상인 거 같네요.

slowbooktech   2년 전

strnlen이 훨씬 안전한 함수였네요! strlen 함수처럼 입력받은 문자열의 길이를 리턴하면서도 \0을 만나지 못할 경우를 대비해 최대길이까지 받아 프로그램을 종료하여 오류가 생기지 않게 방어한다고 이해했습니다.

답변 진심으로 감사드립니다. 행복하세요~~!

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