문제

C 표준 라이브러리는 I/O 안전과 관련하여 악명 높습니다. 많은 기능에는 버퍼 오버플로가 있습니다 (gets, scanf), 또는 적절한 인수가 주어지지 않으면 기억할 수 있습니다 (scanf), 등등. 한 번에 한 번, 나는 이러한 결함이없는 자신의 도서관을 작성한 진취적인 해커를 발견했습니다.

당신이 본이 라이브러리 중 가장 좋은 것은 무엇입니까? 프로덕션 코드에서 사용 했습니까? 그렇다면 취미 프로젝트 이상으로 유지되었습니다.

도움이 되었습니까?

해결책

나는 사용한다 말 잘하는 라이브러리에는 많은 우수한 표준 및 비 표준 기능이 있습니다.

보다 https://developer.gnome.org/glib/stable/

그리고 아마도 당신은 사랑에 빠지게 될 것입니다 ... :)

예를 들어:

https://developer.gnome.org/glib/stable/glib-String-Utility-Functions.html#g-Strdup-printf

설명합니다 g_strdup_printf 이다:

표준 C sprintf () 함수와 유사하지만 더 안전하지만 더 안전합니다. 필요한 최대 공간을 계산하고 결과를 유지하기 위해 메모리를 할당합니다.

다른 팁

이것은 실제로 가장 안전한 질문에 대답하는 것이 아닙니다 도서관 사용하지만, 언급 한 버퍼 오버 플로우에 취약한 대부분의 기능에는 표준 방법이 사용될 때 열린 보안 구멍을 방지하기 위해 버퍼 길이를 인수하는 더 안전한 버전이 있습니다.

경고 수준을 완화하지 않으면 일반적으로 더 이상 사용되지 않은 방법을 사용할 때 컴파일러 경고를 받게되므로 대신 더 안전한 방법을 사용할 수 있습니다.

나는 믿는다 Apache 휴대용 런타임 (APR) 도서관은 표준 C 라이브러리보다 안전합니다. 나는 그것을 Apache 모듈의 일부로 사용하지만 독립적 인 프로세스에도 사용합니다.

내가 말하는 것의 예로서, DJ Bernstein, DJB, 저자 djbdns 그리고 qmail, 만들었습니다 djblib, 많은 C 표준 라이브러리 기능에 대한 빠르고 단단하고 안전한 대안을 제공합니다.

창문에는 a가 있습니다 '안전한'C/C ++ 라이브러리.

어쩌면 첫 번째 질문은 당신이 정말로 평범한 c가 필요한지일까요? (아마도 .net 또는 java와 같은 언어가 옵션 일 수 있습니다. 예를 들어 버퍼 오버플로가 더 이상 문제가되지 않습니다)

다른 옵션은 다른 고급 언어가 옵션이 아닌 경우 프로젝트의 일부를 C ++로 작성하는 것입니다. 그런 다음 C가 필요한 경우 C ++ 코드를 캡슐화하는 C 인터페이스를 가질 수 있습니다.

C ++ 표준 라이브러리가 빌드 한 모든 고급 기능을 추가하면 C 코드는 대부분의 경우에만 약간 더 빠릅니다 (기존 및 테스트 프레임 워크보다 더 많은 버그가 포함되어 있습니다).

당신은 항상 당신이 좋아하는 라이브러리를 구현하고 그것을 사용할 수 있도록 자유 롭습니다 - 어려운 부분은 소프트웨어가 필요한 플랫폼에서 사용할 수 있도록하는 것입니다. 적절한 경우 표준 기능 주위에 포장지를 사용할 수도 있습니다.

그것이 정말로 좋은 아이디어인지 여부는 다소 논쟁의 여지가 있지만 C 표준위원회에서 더 안전한 C 기능 세트를 위해 TR24731이 발표되었습니다. 거기에는 확실히 좋은 것들이 있습니다. 이 질문 참조 : C 코드에서 TR 24731 안전 함수를 사용하십니까?, 기술 보고서에 대한 링크가 포함됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top