CodeBlanks Logo Icon CodeBlanks

strerror

  • C kursu
  • Orta seviye
  • Ders 55/116
  • 5 dk

strerror ile hata mesajı almayı öğrenirsin.

strerror fonksiyonu

strerror bir errno kodunu insan-okur dizeye çevirir. Kullanımı: char *msg = strerror(errno);. Dönen dizeyi printf("%s\n", msg); ile yazdırabilirsin. <string.h> başlığı gerekir.

perror senin önekinle mesajı birleştirip stderr'e yazar; strerror ise yalnızca mesajı döndürür. Bu yüzden strerror daha esnektir: mesajı dosyaya yazabilir, günlüğe ekleyebilir ya da başka bir dizeyle birleştirebilirsin. Hata akışını kendin seçersin.

strerror ve fprintf

strerror'ın döndürdüğü dizeyi fprintf(stderr, "hata: %s\n", strerror(errno)); biçiminde stderr'e yazdırabilirsin. Bu, perror gibi çalışır ama biçimi tamamen sen kontrol edersin.

strerror'ın döndürdüğü dize statik bir belleğe aittir; serbest bırakma. Aynı iş parçacığında sonraki strerror çağrısı bu belleğin üzerine yazar. Bu yüzden dizeyi hemen kullan ya da strncpy ile kopyala. Çok iş parçacıklı programlarda strerror_r tercih edilir; thread-safe versiyondur.

Uygulama strerror ile hata yazdır

<stdio.h> ve <string.h> başlıklarını ekle. main içinde errno = ENOENT; ata, sonra char *msg = strerror(errno); ile mesajı al ve printf("%s\n", msg); ile yazdır. ENOENT için tipik çıktı No such file or directory'dir.

Başlangıç kodu

main.c
#include <stdio.h>
// string.h başlığını ekle

int main(void) {
    // errno'ya ENOENT ata
    // strerror ile mesajı al
    // printf ile yazdır
    return 0;
}

Örnek çözüm

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

int main(void) {
    errno = ENOENT;
    char *msg = strerror(errno);
    printf("%s\n", msg);
    return 0;
}

Beklenen çıktı

No such file or directory

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 perror ve strerror farkını eşle

Kavram Anlamı
perror stderr'e yazar
strerror Dize döndürür
Önek perror parametresi
Esneklik strerror avantajı

2 strerror çağrısını tamamla

Soru
char *msg = ____(errno);
printf("%s\n", msg);
Cevap
char *msg = strerror(errno);
printf("%s\n", msg);

Açıklama: strerror(errno) hata dizesini döndürür.

3 strerror(errno) ne döndürür?

  • char * dize Doğru cevap
  • FILE * akış
  • void
  • int hata kodu

Açıklama: strerror hata dizesini char * olarak döndürür.

Orta seviye bölümündeki tüm dersler