clock   3년 전

사용한 아이디어 : 

1. 구조체에 문자열 입력과 동시에 문자열 길이 저장

2. sort 함수에 len(문자열 길이)를 1순위, str(문자열) 사전순서를 2순위로 정렬

3. 출력 시 출력할 문자열과 전 문자열이 같다면 출력 건너뜀

//

제가 알기로 Segmentation Fault가 배열 등의 선언한 범위를 벗어나서 접근을 시도했을 때 나타나는 런타임 에러라고 알고있습니다. 그런데 구조체 내의 문자열 길이도 50을 넘고, 배열 개수도 20000개를 넘게 선언해주었는데 런타임 에러가 떴습니다. 물론 더 많이 선언해보기도 했습니다.

제가 알고있는 Segmentation Fault가 다른 이유도 있는 건가요?

prarie   3년 전

22번째 줄에 a.str < b.str; 가 뜻하는 바를 헷갈리신 것 같아요

a.str 은 a 안에 있는 str 배열의 맨 앞 요소의 주소를 나타냅니다.

즉 주소로 compare 함수를 짜셔서 오류가 나는 것 같아요


올바르게 고칠려면 strcmp(a.str, b.str) < 0 으로 고치시면 됩니다.


그리고 문자열을 쓸 때 C++ 에서 구현되어 있는 함수와 같이 쓰고 싶다면 std::string 을 공부하시는 게 좋을 것 같아요

char * 를 문자열로 사용할 때 c++ 함수와 같이 쓰면 헷갈리거나 힘들 때가 있어요

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