hyemin1826   4년 전

c 언어로 풀고 있는데요, OOOOOOOOOO 이 케이스를 단독으로 돌리면 55가 잘 뜨는데
OOOOXOOOXXOXOOOXXX 뭐 이런식으로 문자열 사이즈가 10보다 큰 거를 OOOOOOOOOO 케이스보다 앞에 돌리면 프린트를 잘못 합니다.

예로

3
OXOXOXOXOXOXOX
OOOOOOOOOO
OOOOXOOOOXOOOOX

input 값이 위와 같을 때 output값은
7
56
30
으로 나오거든요.

추측하기로는 OOOOOOOOOO 케이스를 입력할 때 앞선 케이스인 OXOXOXOXOXOXOX가 사용했던 array의 흔적 때문인 것 같은데요...흠....

실제로 OOOOOOOOOO 가 test일 때 어디서 count가 잘못됐는지 추적하니깐
test[12]에서 잘못 됐더라구요.
그런데 문제는 test를 프린트하면 OOOOOOOOOO이 된다는 겁니다. 아마 test[10]에 '\0'이 입력되면서 거기까지만 출력되는 것 같은데요.


그렇게 되면 궁금한 건 문자열의 초기화입니다.
구글링을 해보니 문자열을 초기화하기 위해서는 test[0]='\0'을 입력하라고 하는데요, 사실 상 그건 초기화가 아니지 않나요? '\0' 뒤부터 다시 문자열이 시작되니까요

왜 그럴까요?

띠용..

djm03178   4년 전

sizeof는 문자열의 길이가 아니라 배열의 크기를 계산하는 연산자이기 때문에 무조건 80이 됩니다.

Green55   4년 전

문자열은 \0이 끝을 알려주는 지표입니다. 그 뒤를 접근하는것 자체가 문제이기 때문에, 반대로 말하면 그 뒤에 뭘 저장해놓든 크게 상관은 없습니다.

djm03178님 말대로, sizeof는 할당된 크기를 사용할 때 쓰는 것이고, 실제 문자열의 길이는 strlen 등으로 확인하셔야합니다.

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