Aracılığıyla paylaş


Uyarı C6053

'function' çağrısı 'variable' dizesini sıfır sonlandırmayabilir.

Açıklamalar

Bu uyarı, belirtilen işlevin sonuçta elde edilen dizenin sıfır sonlandırılmaması için çağrıldığını gösterir. Bu hata, yararlanılabilir arabellek taşmasına veya kilitlenmesine neden olabilir. Bu uyarı, açıklama ekli bir işlev null ile sonlandırılan bir dize bekliyorsa ancak null olmayan sonlandırılmamış bir dize geçirirseniz de oluşturulur.

Çoğu C standart kitaplığı ve Win32 dize işleme işlevi sıfır sonlandırılan dizeler gerektirir ve üretir. Birkaç 'sayılan dize' işlevi (, wcsncpy, , _mbsncpy, _snprintfve snwprintfdahilstrncpy) arabelleklerini tam olarak dolduruyorsa sıfır sonlandırılan dizeler üretmez. Bu durumda, sıfır sonlandırılan bir dize bekleyen bir dize işlevine yapılan sonraki bir çağrı, sıfırı aramak için arabelleğin sonunun ötesine geçer. Program, dizenin sıfırla sona erdiğinden emin olmalıdır. Genel olarak, 'sayılan dize' işlevine arabellek boyutundan küçük bir uzunluk geçirmeniz ve ardından arabellekteki son karaktere açıkça sıfır atamanız gerekir.

Kod analizi adı: MISSING_ZERO_TERMINATION1

Örnekler

Aşağıdaki örnek kod bu uyarıyı oluşturur:

#include <string.h>
#define MAX 15

size_t f( )
{
  char szDest[MAX];
  char *szSource="Hello, World!";

  strncpy(szDest, szSource, MAX);
  return strlen(szDest); // possible crash here
}

Bu uyarıyı düzeltmek için aşağıdaki örnek kodda gösterildiği gibi dizeyi sıfır sonlandırın:

#include <string.h>
#define MAX 15

size_t f( )
{
  char szDest[MAX];
  char *szSource="Hello, World!";

  strncpy(szDest, szSource, MAX-1);
  szDest[MAX-1]=0;
  return strlen(szDest);
}

Aşağıdaki örnek kod, güvenli dize işleme işlevini kullanarak bu uyarıyı düzeltmektedir strncpy_s :

#include <string.h>
#define MAX 15

size_t f( )
{
  char szDest[MAX];
  char *szSource= "Hello, World!";

  strncpy_s(szDest, sizeof(szDest), szSource, strlen(szSource));
  return strlen(szDest);
}

Buluşsal yöntemler

Bu uyarı bazen pratikte güvenli olması garanti edilen belirli deyimlerde bildirilir. Bu hatanın sıklığı ve olası sonuçları nedeniyle analiz aracı, gürültüyü azaltmaya yönelik tipik yanlılığı yerine olası sorunları bulma konusunda taraflıdır.

Ayrıca bkz.