Aracılığıyla paylaş


C6328

Uyarı C6328: boyut uyuşmazlığı: <type> <number> parametre olarak geçildi zaman <type> <function> çağrısı gereklidir

Karakter tabanlı c çalışma zamanı yordamları ailesi adı için isxxx(), türünde bir bağımsız değişken olarak geçirerek char önceden kestirilemeyecek sonuçlara sahip olabilir.Örneğin, bir sbcs ya da mbcs tek baytlık karakter türü char 'den büyük bir değere sahip 0x7F negatif bir değerdir.Varsa bir char olan geçti, derleyici değeri imzalı bir dönüştürmek int veya imzalı bir long.Bu değer, beklenmeyen sonuçlarla derleyici tarafından oturum genişletilmiş olabilir.Örneğin, isspace türünde bir bağımsız değişken kabul int; Ancak, kendi giriş bağımsız değişkeni için değerlerin geçerli aralığı:

0 <= c <= 255, özel değeri artı EOF.

Örnek

Varsayılan olarak, char imzalı bir yazın Visual C++'da, bu nedenle ise char türünde bir değişken değer aralığı -128 <= c <= 127.Bu nedenle, aşağıdaki çıkmışsa:

#include <iostream>

void f( )
{
    char c = -37;
    int retVal = isspace( c );
    // code ...
}

cişareti imzalı bir genişletilmiş olacaktır int -37 değeri ile olduğu için geçerli aralığın dışında isspace.

Bu sorunu gidermek için kullanabileceğiniz static_castaşağıdaki kodda gösterildiği gibi:

#include <iostream>

void f( )
{
    char c = -37;
    int retVal = isspace( static_cast<unsigned char> (c) );
    // code ...
}

Özellikle bu hatayı yakalamak için uyarı C6328 bulunmaktadır.Aralık 7-bit ASCII karakter dönüştürme gerekli değildir, ancak kadar ve program arıza ve sonlandırma gibi öngörülemeyen sonuçlar aralık dışındaki karakter uzunluğunda olabilir.