strerror_s
, _strerror_s
, _wcserror_s
, __wcserror_s
Sistem hata iletisi (strerror_s
, _wcserror_s
) alma veya kullanıcı tarafından sağlanan bir hata iletisini (_strerror_s
, __wcserror_s
) yazdırma. Bu işlevler, CRT'deki strerror
Güvenlik özellikleri bölümünde açıklandığı gibi güvenlik geliştirmeleri içeren , _strerror
, _wcserror
, __wcserror
sürümleridir.
Sözdizimi
errno_t strerror_s(
char *buffer,
size_t sizeInBytes,
int errnum
);
errno_t _strerror_s(
char *buffer,
size_t sizeInBytes,
const char *strErrMsg
);
errno_t _wcserror_s(
wchar_t *buffer,
size_t sizeInWords,
int errnum
);
errno_t __wcserror_s(
wchar_t *buffer,
size_t sizeInWords,
const wchar_t *strErrMsg
);
template <size_t size>
errno_t strerror_s(
char (&buffer)[size],
int errnum
); // C++ only
template <size_t size>
errno_t _strerror_s(
char (&buffer)[size],
const char *strErrMsg
); // C++ only
template <size_t size>
errno_t _wcserror_s(
wchar_t (&buffer)[size],
int errnum
); // C++ only
template <size_t size>
errno_t __wcserror_s(
wchar_t (&buffer)[size],
const wchar_t *strErrMsg
); // C++ only
Parametreler
buffer
Hata dizesini tutmak için arabellek.
sizeInBytes
Arabellekteki bayt sayısı.
sizeInWords
Arabellekteki sözcük sayısı.
errnum
Hata numarası.
strErrMsg
Kullanıcı tarafından sağlanan ileti.
Dönüş değeri
Başarılı olursa sıfır, hata durumunda bir hata kodu.
Hata koşulları
buffer |
sizeInBytes /sizeInWords |
strErrMsg |
İçeriği buffer |
---|---|---|---|
NULL |
herhangi bir | herhangi bir | yok |
herhangi bir | 0 | herhangi bir | değiştirilmedi |
Açıklamalar
strerror_s
İşlev iş parçacığı açısından güvenlidir.
strerror_s
İşlev, içinde dizesini döndüren bir hata iletisi dizesiyle buffer
eşlererrnum
. _strerror_s
hata numarasını almaz; uygun iletiyi belirlemek için geçerli değerini errno
kullanır. İleti veya tarafından strerror_s
_strerror_s
yazdırılmaz veya görüntülenmez. İletinin çıktısını almak için gibi fprintf
bir çıkış işlevi çağırmanız gerekir:
if (( _access( "datafile",2 )) == -1 )
{
_strerror_s(buffer, 80, NULL);
fprintf( stderr, buffer );
}
ise strErrMsg
NULL
, _strerror_s
içinde hata oluşturan son kitaplık çağrısı için sistem hata iletisini içeren bir dize buffer
döndürür. değerine eşit NULL
_strerror_s
değilsestrErrMsg
, içinde dize iletinizi içeren (sırasıyla) bir dizebuffer
, iki nokta üst üste, boşluk, hata oluşturan son kitaplık çağrısı için sistem hata iletisi döndürür. Dize iletiniz en fazla 94 karakter uzunluğunda olabilir.
Bu işlevler, uzunluğu arabellek boyutunu aşıyorsa hata iletisini keserek - 1. içindeki buffer
sonuç dizesi her zaman null olarak sonlandırılır.
için _strerror_s
gerçek hata numarası değişkeninde errno
depolanır. Sistem hata iletilerine, hata numarasına göre sıralanmış bir ileti dizisi olan değişkeni _sys_errlist
üzerinden erişilir. _strerror_s
değerini değişkeninin errno
_sys_errlist
dizini olarak kullanarak uygun hata iletisine erişir. değişkeninin _sys_nerr
değeri, dizideki _sys_errlist
en fazla öğe sayısı olarak tanımlanır. Doğru sonuçlar elde etmek için, kitaplık yordamı bir hatayla döndürdikten hemen sonra çağrısında _strerror_s
bulunur. Aksi takdirde, sonraki çağrılar strerror_s
veya _strerror_s
değerinin errno
üzerine yazabilir.
_wcserror_s
ve __wcserror_s
sırasıyla ve _strerror_s
'nin strerror_s
geniş karakterli sürümleridir.
Bu işlevler parametrelerini doğrular. Arabellek NULL
veya boyut parametresi 0 ise, Parametre doğrulama bölümünde açıklandığı gibi geçersiz parametre işleyicisi çağrılır. Yürütmenin devam etmesi için izin verilirse, işlevler geri döner EINVAL
ve olarak EINVAL
ayarlanırerrno
.
_strerror_s
, _wcserror_s
ve __wcserror_s
ansi tanımının bir parçası değildir, bunun yerine microsoft uzantılarıdır. Bunları taşınabilirlik istenen yerde kullanmayın; ANSI uyumluluğu için kullanın strerror_s
.
C++'ta bu işlevlerin kullanılması şablon aşırı yüklemeleriyle basitleştirilir; aşırı yüklemeler arabellek uzunluğunu otomatik olarak çıkararak boyut bağımsız değişkeni belirtme gereksinimini ortadan kaldırır. Daha fazla bilgi için bkz . Güvenli şablon aşırı yüklemeleri.
Bu işlevlerin hata ayıklama kitaplığı sürümleri önce arabelleği 0xFE ile doldurur. Bu davranışı devre dışı bırakmak için kullanın _CrtSetDebugFillThreshold
.
Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.
Genel metin yordamı eşlemeleri
TCHAR.H yordamı | _UNICODE ve _MBCS tanımlanmadı |
_MBCS tanımlanan |
_UNICODE tanımlanan |
---|---|---|---|
_tcserror_s |
strerror_s |
strerror_s |
_wcserror_s |
Gereksinimler
Yordam | Gerekli başlık |
---|---|
strerror_s , _strerror_s |
<string.h> |
_wcserror_s , __wcserror_s |
<string.h> veya <wchar.h> |
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
örneğine perror
bakın.