poroli0119   2년 전

질문1.

https://wtg-study.tistory.com/...

위의 블로그에서 그대로 가져온 코드인데

gets(str) 때문에 컴파일 오류가 발생합니다.

왜 그런지 알수있을까요?

-----

질문2.

또한 이제 알고리즘파트로 점점 진입하는것같은데 대부분 c++로 풀이를 많이하더라구요.

그래서 순수 c로만 되어있는 풀이찾기가 점점 어렵더라구요.

저같은 경우는 계속 c로만 풀었습니다.


현재 공부순서는

완전탐색 -> 정렬 -> 스택,큐,덱 -> DFS/BFS ... 이렇게 잡고있습니다.

최대한 c로 풀어보고 c++로 넘어가려고 하는데 어떻게 생각하시는지요.

혹은 어느 파트까지는 c로 풀면좋고 어느 파트부터는 c++로 넘어가는게 좋다 이런게 있을까요?


(최종적으로 코딩테스트는 c++로 볼 계획입니다.)

djm03178   2년 전

1. gets는 오래 전부터 C에서 deprecated되었고 C11 및 C++14 등에서부터 표준에서 완전히 제거된 함수입니다. 이유는 배열의 크기를 프로그래머가 함수에게 알려줄 수 있는 방법이 전혀 없어 배열의 크기를 넘어서도록 사용자가 마음대로 입력할 수 있다는 보안 문제가 있기 때문입니다. 따라서 앞으로는 만일 사용하시는 컴파일러가 gets의 사용을 허용해준다고 하더라도 쓰지 않는 습관을 들이는 것이 좋습니다. 대체제로 fgets를 사용하시기 바랍니다.

2. C++은 C가 할 수 있는 거의 모든 것을 할 수 있고 무엇보다 STL이라는 매우 강력한 라이브러리를 지원하기 때문에 알고리즘 문제를 푸는 데에 있어 C와는 그 편의성을 비교할 수 없습니다. 초반에는 모든 잡다한 작업을 한 줄 한 줄 C로 작성해 보면서 세부적인 구조를 이해해보는 것도 괜찮지만, 문제를 조금 풀다 보면 맨날 똑같은 수십 줄의 코드를 손으로 짜는 것이 지겹고 시간 낭비라고 느끼게 됩니다. 그보다는 적당히 기분 내킬 때 C++로 넘어가셔서 STL을 배우고 반복되는 자료구조 구현은 라이브러리의 힘을 빌리고 문제 해결 능력에만 집중하시는 것이 더 도움되리라 생각합니다. 지금 바로 C++로 넘어간 뒤 C 스타일로 코딩하면서 천천히 STL을 공부해도 괜찮습니다.

poroli0119   2년 전

답변이 너무 깔끔하셔서 당황스러울정도네욥..ㅎㅎ

답변에 시간내주셔서 감사합니다!

poroli0119   2년 전

error: too few arguments to function ‘char* fgets(char*, int, FILE*)’

말씀하신대로 fgets로 바꿔봤는데 위와 같이 오류가 뜨더라구요.

매개변수도 바꿔줘야 할까요?

어디를 더 바꾸거나 추가해야 할지 잘모르겠습니다.. 

djm03178   2년 전

이름만 바꾸면 되는 게 아니라 사용법 자체가 다릅니다. https://modoocode.com/38 등 인터넷 검색을 잘 활용해 보세요.

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