C 표준 도서관 개요

C Standard Library는 ISO C 프로그래밍 언어 표준의 일부로 제공되는 기능, 매크로 및 유형 정의 모음입니다. 그것은 개발자에게 입력/출력, 문자열 처리, 메모리 할당, 수학 계산 및 날짜/시간 조작과 같은 일반적인 작업을 위한 휴대용, 잘 테스트 된 기초를 제공합니다. 사용자 정의 솔루션을 작성하는 대신 표준 라이브러리에 의존해서 버그를 줄이고, 코드 읽기 기능을 개선하고, 다른 플랫폼과 컴파일러의 일관성을 보장합니다.

라이브러리는 여러 헤더 파일로 구성되며 각 그룹 관련 기능. 각 헤더가 효율적인 C 코드를 작성하는 첫 단계가 무엇인지 이해합니다. 아래에서 우리는 가장 중요한 헤더와 핵심 기능을 탐구하고 일상적인 프로그래밍을 단순화하는 방법을 설명하는 실용적인 예와 함께합니다.

필수 헤더와 그 기능

< 스트로디.h & gt; – 입력 및 출력

헤더는 표준 스트림 (stdin, stdout, stderr) 및 파일에 대한 읽기 및 쓰기 기능을 제공합니다. 이없이, 당신은 낮은 수준의 시스템 통화를 구현하거나 자신의 버퍼링 레이어를 작성해야합니다. 키 기능은 다음과 같습니다.

  • / ] – 출력 및 입력을 포맷.
  • / - 파일을 열고 닫습니다.
  • / ] ] - 파일에서 문자열을 안전하게 읽거나 읽으십시오.
  • / ] – 이진 파일 I/O.
  • / ] - 형식 파일 I/O.

예금: 버퍼 오버플로우 없이 사용자가 선을 읽는 것은 ]와 똑똑하게 됩니다:

#include <stdio.h>

int main() {
 char buffer[100];
 printf("Enter a line: ");
 if (fgets(buffer, sizeof(buffer), stdin)) {
 printf("You entered: %s", buffer);
 }
 return 0;
}

<stdlib.h & gt; – 일반 유틸리티

]는 동적 메모리 할당, 임의 수 생성, 프로세스 제어 및 변환 기능을 포함합니다. 이들은 실행 시간에 메모리를 할당하거나 시스템 수준의 작업을 수행 할 필요가있는 프로그램에 필수적입니다.

  • , ] , ] ] – 동적 메모리 관리.
  • ] ], , ] ]] – 문자열-to-number 변환.
  • , ] ] – Pseudo-random 번호 생성.
  • ] ], ] – 프로세스 제어.
  • – 배열에 대한 Quicksort 구현.
  • – 정렬된 배열에 대한 바이너리 검색.

예금:] ]을 가진 정수의 배열을 분류하는 것은 당신의 자신의 일상을 쓰는 것보다 훨씬 간단합니다:

#include <stdio.h>
#include <stdlib.h>

int compare(const void *a, const void *b) {
 return (*(int*)a - *(int*)b);
}

int main() {
 int arr[] = {42, 3, 71, 1, 9};
 size_t n = sizeof(arr) / sizeof(arr[0]);
 qsort(arr, n, sizeof(int), compare);
 for (size_t i = 0; i < n; i++)
 printf("%d ", arr[i]);
 printf("\n");
 return 0;
}

<string.h> – 문자열 및 메모리 작동

C 문자열 (null-terminated arrays of Character)과 작업은 표준 라이브러리없이 오류 프로입니다. ]은 복사, concatenating, comparing 및 검색 문자열뿐만 아니라 메모리 블록 작업을 위해 안전하고 효율적인 기능을 제공합니다.

  • , ] ] – 복사 문자열.
  • , ] ] – 문자열을 훔칩니다.
  • , ] - 문자열을 lexicographically 비교합니다.
  • – 문자열 길이를 가져옵니다.
  • , ] - 하위 문자열이나 문자에 대한 검색.
  • , ] ], ]] – 메모리 블록 작업.
  • – 문자열을 토큰화 (재입력에 대한 관심).

예금: 를 사용하여 두 개의 문자열을 안전하게 수집:

#include <stdio.h>
#include <string.h>

int main() {
 char dest[20] = "Hello, ";
 const char *src = "World!";
 strncat(dest, src, sizeof(dest) - strlen(dest) - 1);
 printf("%s\n", dest);
 return 0;
}

<math.h & gt; – 수학 기능

과학 및 엔지니어링 응용 분야의 경우 ]은 ], , , , , ]]와 같은 부동점 기능을 제공합니다. 이 하드웨어 최적화 및 매우 더 정확한 네이티브 구현보다.

  • – 광장 루트.
  • , ], ] ] – 삼각적 기능.
  • , ] - 노출과 자연의 통나무.
  • – 부동점 번호의 절대값.
  • – 가장 가까운 정수에 둥근.

예금: 두 가지 점 사이의 거리를 계산:

#include <stdio.h>
#include <math.h>

int main() {
 double x1 = 1.0, y1 = 2.0, x2 = 4.0, y2 = 6.0;
 double dx = x2 - x1, dy = y2 - y1;
 double distance = sqrt(dx*dx + dy*dy);
 printf("Distance: %.2f\n", distance);
 return 0;
}

< ctype.h & gt; – 문자 처리

클래스화 및 변환 문자: , , , . 로컬 별 규칙을 처리하고 수동 비교를 쓰기보다 더 안전한.

예:문자로 변환하기:

#include <stdio.h>
#include <ctype.h>

int main() {
 char str[] = "Hello, World!";
 for (int i = 0; str[i]; i++)
 str[i] = toupper(str[i]);
 printf("%s\n", str);
 return 0;
}

<time.h & gt; – 날짜와 시간

]는 현재 시간을 얻고, 이때를 측정하고, 날짜/시간 문자열을 형식합니다. 로깅, 프로파일링 및 스케줄링에 유용한 기능입니다.

  • – 현재 캘린더 시간을 가져옵니다.
  • – 프로그램에서 사용되는 프로세서 시간.
  • – 두 시간 값의 차이.
  • ] - 문자열로 형식 시간.
  • / – 시간 변환 t 끊기 아래로 struct tm.

예금:인쇄일 및 시간:

#include <stdio.h>
#include <time.h>

int main() {
 time_t t = time(NULL);
 struct tm *tm_info = localtime(&t);
 char buffer[26];
 strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", tm_info);
 printf("Current time: %s\n", buffer);
 return 0;
}

표준 라이브러리의 힘을 보여주는 실제 예

파일 읽기 Safely

줄에 의해 텍스트 파일 라인을 읽는 것은 일반적인 요구 사항입니다. ] 버퍼 오버플로를 방지하고 / 핸들 end-of-file 및 오류 조건.

#include <stdio.h>
#include <stdlib.h>

int main() {
 FILE *fp = fopen("data.txt", "r");
 if (!fp) {
 perror("fopen");
 return EXIT_FAILURE;
 }
 char line[256];
 while (fgets(line, sizeof(line), fp)) {
 printf("%s", line);
 }
 if (ferror(fp))
 perror("fgets");
 fclose(fp);
 return 0;
}

문자열의 동적 배열

문자열의 배열을 할당 (변수 길이의 각) 동적 메모리가 필요합니다. 라이브러리의 , ], 및 (사용할 수 있는 경우) 프로세스를 단순화합니다. 참고: ]는 ISO C 함수가 아니라 넓게 지원되지 않습니다; 또한 + 를 사용할 수 있습니다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
 char *words[] = {"apple", "banana", "cherry", "date"};
 size_t num_words = sizeof(words) / sizeof(words[0]);
 // Allocate array of char pointers
 char **copy = malloc(num_words * sizeof(char*));
 if (!copy) return EXIT_FAILURE;
 for (size_t i = 0; i < num_words; i++) {
 copy[i] = malloc(strlen(words[i]) + 1);
 if (copy[i])
 strcpy(copy[i], words[i]);
 }
 // Print and free
 for (size_t i = 0; i < num_words; i++) {
 printf("%s\n", copy[i]);
 free(copy[i]);
 }
 free(copy);
 return 0;
}

C Standard Library를 사용하는 혜택

  • Portability: 표준 라이브러리에 대한 작성된 코드는 어떤 플랫폼(Windows, Linux, macOS, 임베디드 시스템)에 컴파일하고 실행합니다.
  • Correctness: 라이브러리 함수는 엄숙하게 테스트 및 핸들 가장자리 케이스 (NUM 포인트, 빈 문자열, 과잉 플로우와 같은) 많은 손 압연 구현보다 더 나은.
  • Performance: Standard library 구현은 종종 inlining, lookup table, Hardware Instruction와 같은 기술을 사용하여 대상 하드웨어에 최적화되어 있습니다.
  • Readability: ]] 를 사용하여 사용자 정의 버블 정렬이 즉시 다른 개발자에게 의도를 전달합니다.
  • Maintainability: Libraries는 표준을 기반으로 진화합니다. 컴파일러 또는 플랫폼을 업그레이드하면 코드를 터치하지 않고 라이브러리 기능 성능을 자동으로 향상시킬 수 있습니다.

모범 사례 및 공통 Pitfalls

항상 반환 값 확인

, , ]]와 같은 기능은 실패할 수 있습니다. 수익값을 무시하거나 정의되지 않는 행동으로 이끌어 냅니다. 예를 들어:

FILE *fp = fopen("nonexistent.txt", "r");
if (!fp) {
 perror("fopen");
 return EXIT_FAILURE;
}

Prefer Bounded 기능

와 같은 함수는 ]]는 버퍼 크기를 확인하지 않기 때문에 위험합니다. , , 또는 (내가 사용 가능) 버퍼 오버플로를 방지하기 위해. 예:

char buf[10];
snprintf(buf, sizeof(buf), "%s", "Hello, World!"); // safely truncated

무료 모든 Dynamically 할당 된 메모리

모든 또는 ]은 일치해야 ]]. Valgrind 또는 AddressSanitizer와 같은 도구를 사용하여 메모리 누출을 감지합니다.

거주자의 인식

일부 표준 라이브러리 기능 (예 :, ], ) 내부 정적 상태를 사용 하 고 스레드 안전 하지 않습니다. 멀티 스레드 프로그램에서, 같은 재입력 버전을 선호 또는 사용할 수 있습니다.

더 많은 자료

C 표준 라이브러리에 대한 이해를 깊게하려면, 저자 참조를 참조:

관련 기사

C Standard Library는 C 프로그래머를 위한 불가결한 도구입니다. 이 헤더와 함수를 마스터함으로써, 더 짧은, 더 안전한, 그리고 더 휴대용 코드를 쓸 수 있습니다. 대신 기본 구성 요소를 재출구하는 대신, 애플리케이션을 고유하게 만드는 논리에 집중할 수 있습니다. C에서 계속 개발하는 것처럼, 표준 라이브러리가 이미 문제를 해결하는지 확인한 첫 번째 검사 습관을 만들 수 있습니다. 일반적으로, 그리고 그것은 10 년의 집단 지혜를 구운.