seawon0808   3년 전

gets(a); 에서 컴파일에러가 납니다.

error: ‘gets’ was not declared in this scope; did you mean ‘fgets’? 라고 나오는데 다른 코드에서 gets를 사용하여도 잘 작동이 됐습니다.

왜 이 문제에서만 컴파일에러가 났는지 도와주세요.

yijw0930   3년 전

백준의 최신 버전 c++ 표준 라이브러리에는 gets가 존재하지 않습니다.(이게 맞는 표현인지는 저도 헷갈리네요.) 더 낮은 버전의 c++을 이용하거나 fgets를 사용하시면 됩니다.

seawon0808   3년 전

이 코드를 제출시키면 런타임에러 SegFault가 뜹니다.

제가 fgets 함수를 잘못 이용한건가요?

yijw0930   3년 전

일단 보이는 문제들을 들어보면

1. 입력에는 공백이 포함되므로 문자열 A의 길이는 2000 이상이 필요할 것 같습니다.

2. char형을 less<int>를 이용하여 정렬해도 되는 것이 맞는지 의심스럽습니다.(사실 문제가 없을 수도 있습니다)

3. 아스키코드값 순서로 정렬하면 공백이 알파벳보다 우선하므로 0부터 m까지 보시면 공백으로 도배되어 있을 겁니다.

segfault의 원인은 m이 1000일 때 a[0]부터 a[1998]까지를 정렬하게 되는데 이때 할당되지 않은 메모리를 건드린 것 같습니다.

seawon0808   3년 전

결국 fgets를 사용하려면 코드를 다 바꿔야 되는거네요...

yijw0930   3년 전

아니오 이 코드는 gets를 사용해도 잘못된 것 같습니다;;

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