C Standard Library'nin Genel Bakışı
C Standard Library, ISO C programlama dili standardının bir parçası olarak sunulan işlevlerin, makroların ve tip tanımların koleksiyonudur. Geliştiricilere taşınabilir, giriş / ⁇ , dize işleme, hafıza paylaşımı, matematiksel hesaplama gibi ortak görevlerin yanı sıra, standart kütüphaneye güvenmek, hataları azaltmak, kod okuma becerisi kazandırmak ve programlarınızın sürekli olarak farklı platformlarda ve derleyicilerle ilgili temelleri sağlamak.
Kütüphane birkaç başlıkta düzenlenir, her bir profille ilgili işlevsellik. Her bir başlıkta etkili ve kullanılabilir C kodu yazmak için ilk adımdır. Aşağıda, en önemli başlıklarını ve temel işlevlerini keşfedin, günlük programlamayı nasıl basitleştirdiğini gösteren pratik örneklerle.
Temel Headers ve Fonksiyonlar
<stdio.h> – Giriş ve Çıkış
[FONT:0) Başlık, standart akışlara (stdin, stdout, stderr) ve dosyaların okunması için işlevleri sağlar.Eğer olmadan, düşük seviyeli sistem çağrılarını uygulamanız veya kendi tamponlama katmanınızı yazmalısınız.
- [FONT:0] [Dönetici ve giriş.
- [FONT:0] / ) - Açık ve yakın dosyalar.
- [FONT:0] / ) - Dosyalardan yazma / dizeleri güvenle okuyun.
- [FONT:0] / ) - İkili dosya I/O.
- [FONT:0] / ) [I/O.
[[Düzücü:0)Example:[Dönetici:[Dönder:[Döncük:0)[[Dönem:[Döncü:[Döncü:[Döncük:[Döncük: 0:0) Kullanıcıdan bir satır okumak, akağı olmayan bir satır basit değildir.
#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;
}
Velt;stdlib.h> – General Utilities
[[Dörtücük hafıza dağılımı, rastgele numara nesil, süreç kontrolü ve dönüşümler için işlevleri içerir. Bunlar, işletim zamanında hafızayı kapatma veya sistem düzeyinde operasyonları gerçekleştirmeye ihtiyaç duyan programlar için gereklidir.
- [FONT:0] [FLT: 16] [DÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜye Değer: · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
- [FONT:0] [FLT: 4] [FLT: 16] [Dönemli dönüşümler.
- [FONT:0] [FONT:2] ) - Pseudo-random sayı nesli.
- [FONT:0] , [[Dönetici:2] ) - Süreç kontrolü.
- [FONT:0] – Diziler için Quicksort uygulaması.
- [FONT:0] – İkili arama serileri üzerine.
[FONT:0)Example:[Dönetici:[Dönder: 1 ) Bir dizi tamsayı kendi tür rutininizi yazmaktan çok daha basit:
#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;
}
Velt; en başta.h> – String ve Memory Operations
C dizeleri ile çalışmak (belirli diziler) standart kütüphane olmadan hata-pronedir.ETHFLT:29) kopyalama, koncatenating, karşılaştırma ve arama dizeleri, hafıza operasyonları için güvenli ve verimli fonksiyonlar sağlar.
- [FONT:0][FLT: 9] [FONT:2] )[değiştir | kaynağı değiştir]
- [FONT:0] [FONT:2] )[değiştir | kaynağı değiştir]
- [FONT:0] , )[T][/FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=)[FONT=[FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=TRNT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=))))))
- [FONT:0] - Ekran uzunluğu alın.
- [FONT:0] , [[Dönetici:2] ) - Alt veya karakterler için arama.
- [FONT:0] [FONT:2] [FLT: 4] [DÜŞÜNÜŞÜNÜye: [8]
- [FONT:0] – Bir dizeyi (daha iyi bir yetenek için bakım ile) etkinleştirin.
[FONT:0)Example:[Dönem:[Dönem: 1) Güvenli bir şekilde iki dizeleri kullanarak övme:0)
#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;
}
<mat.h> – Matematiksel Fonksiyonlar
Bilimsel ve mühendislik uygulamaları için, [[Ücretsiz-düzeltme işlevleri, [Üye Olmayanlar İçindekiler, AŞAM’ın) ve “Üye Olmayanlar” (İngilizce) için, [[Ayasa, ﴾45﴿
- [FONT:0] - Square kök.
- [FONT:0] , [FLT: 4] [Dönetici: Trigonometrik fonksiyonlar.
- [FONT:0] [FONT:2] ) - Exponential ve doğal logarithm.
- [FONT:0] - Yüz noktaları için mutlak değer.
- [FONT:0] – En yakın tam tam tamsaya Yuvarlak.
[FONT:0)Example:[Dönem:[Dönler arası mesafeyi hesaplayın:
#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> – Karakter işleme
Fonksiyonlar:61) sınıflandırma ve karakter dönüştürme: [[Üye:62|, [[Üye:63|, [[Üye:64||||evrensel kurallar ve el elemelerinden daha güvenli.
[FONT:0)Example:[Dönder:[Döncü: 1 ) Bir dizeyi üstlere dönüştürür:
#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;
}
Velt; Zaman.h> - Tarih ve Zaman
[[Din:67|Mevcut zamanı elde etmek için fonksiyonlar sağlar, elapd zamanı ölçür ve format tarihi / zaman dizeleri.kullanıcı için kullanışlı, profilleme ve zamanlama.
- [FONT:0] - Mevcut takvim süresi alın.
- [FONT:0] - Program tarafından kullanılan süreç veya zaman.
- [FONT:0] - İki zaman değerleri arasındaki fark.
- [FONT:0] - Bir dize olarak zaman.
- [FONT:0] / ) - Bit zaman t to broken-down struct tm.
[FONT:0)Example:[Dön:[Dön:[Dön: 1]Mevcut tarih ve zaman:
#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;
}
Standart Kütüphanenin Gücünü Açan Pratik Örnekler
Bir Dosyayı Güvenli Bir Şekilde Okumak
Bir metin dosyasını satırla okumak ortak bir gerekliliktir.UseETHFLT:75) Buffer Overflow ve [[76) / [[Dönt:77|Son-gün ve hata koşullarını ele alır.
#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;
}
Strings'in dinamik dizileri
Bir dizi dizeyi ( değişken uzunlukta) dinamik hafıza gerektirir. Kütüphanenin [[Dönetici:79), [[Dönem:80| ve [[Dönemli:81) işlemi basitleştirir. Not: [[Dönetici:82]
#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 Kütüphanesi Kullanımının Faydaları
- [FONT:0)Portability:[Dönetici:[Dönetici:0) Standart kütüphaneye karşı yazılmış olan Kod (Windows, Linux, Mac, gömülü sistemler) üzerinde çalışır.
- [FONT:0)Kurumsallık:[Dönetici:[Döneticiler) Kütüphane işlevleri titiz bir şekilde test edilir ve kenar davalarını (nok noktaları, boş dizeler ve aşırı akışlar gibi) birçok el kayıt dışı uygulamadan daha iyi.
- [FONT:0)Performance:[[Dönetici:[Dönetici:0) Standart kütüphane uygulamaları genellikle hedef donanım için optimize edilmiştir, inlining, lookup masaları ve donanım talimatları gibi teknikleri kullanarak.
- [FONT:0)Okulanabilirlik:[Dönetici:0)[FONT:0)[0][0]Okulabilir:[Dönetici:0).
- [FONT:0)Maintainability:[Döneticiler standartla gelişti. Bir derleyici veya platform otomatik olarak kodunuza dokunmadan kütüphane fonksiyonunu artırabilir.
En İyi Uygulamalar ve Ortak Pitfalls
Her zaman Değerleri Kontrol Etmeye Geçin
İşitleri:87), [[Dint:88) ve [[Dint:89) gibi fonksiyonlar başarısız olabilir. geri dönüş değerlerini görmezden gelmek, kazalara veya tanımlanmamış davranışlara yol açabilir.
FILE *fp = fopen("nonexistent.txt", "r");
if (!fp) {
perror("fopen");
return EXIT_FAILURE;
}
Bounded Functions tercih et
İşitler:91) ve [[92|92|seçmişler tehlikeli çünkü buffer boyutları kontrol etmiyorlar.UseurFLT:93) veya [[FONTFLT:95|inançlar için mevcut olan (varda)
char buf[10];
snprintf(buf, sizeof(buf), "%s", "Hello, World!"); // safely truncated
Tüm Dinamik Olarak Tüm Hafıza
Her ne kadar bir Âdem-i İmran-ı Hakk'a yemin olsun ki, Kur'an'ın sızdığı bir şekilde, Allah'ın sızdığı, sûresi ile ilgili bir bilgi sahibi olmak gerekir.
Yenidenlik için bir farkındalık
Bazı standart kütüphane işlevleri (örneğin, [[Dönetici:100) iç statik durumu kullanır ve çok hazır programlarda, mevcut olan yeniden kullanım sürümlerini tercih eder.
Daha Fazla Kaynakları
C Standard Kütüphanesi hakkındaki anlayışınızı derinleştirmek için, yazara dayalı referanslar:
- [FONT=0)cppreference.com – C standart kütüphane başlıkları[Dönler: 1 )
- [0]GNU C Library Referans Kılavuzu).
- [FONT=0)POSIX Programr'ın Kılavuzu (C standart kütüphane işlevleri dahil)).
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
C Standard Library her C programır için vazgeçilmez bir araçtır. İlk kontrolünü ustaca, daha kısa, daha güvenli ve daha taşınabilir kod yazabilirsiniz.Temel bileşenleri yeniden icat etmek yerine, uygulamanızı benzersiz hale getiren mantıka odaklanabilirsiniz.C'de gelişmeye devam ettikçe, standart kütüphanenizin zaten probleminizi çözdüğü bir alışkanlık haline getirin - genellikle, ve bu yüzden on yıllar boyunca kolektif bilgelik pişirilir.