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
#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
#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
char *msg = ____(errno);
printf("%s\n", msg);
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.