Ich bin neu in C++. Ich brauche Hilfe dieses Fehler Fixierung:C++ Vergleich zwischen Ganzzahlausdrücken mit Vorzeichen und ohne Vorzeichen
Item.cpp: In member function ‘char* ict::Item::sku() const’:
Item.cpp:65:36: warning: comparison between signed and unsigned integer
expressions [-Wsign-compare]
Dies ist der Teil des Codes, der den Fehler geben:
//in header file
char m_sku[MAX_SKU_LEN + 1];
//in cpp file
char* Item::sku() const
{
int length = strlen(m_sku);
char *arr = new char[length]();
for (int i = 0; i <= strlen(m_sku); i++) {
arr[i] = m_sku[i];
}
return arr;
}
Änderung 'int I' zu 'std :: size_t' Letzteres ist unsigned und ist der Typ von strlen(), der niemals negativ sein kann. Das Vergleichen von nicht signierten und signierten Ints kann zu einigen sehr schwer zu findenden Problemen führen, daher die Warnung. Die Warnung ist, weil beide Ints in unsigned konvertiert werden und wenn eins negativ ist, wird es eine große positive Zahl, so dass Sie einige wirklich merkwürdige Ergebnisse erhalten können. Mögliches Duplikat von http://stackoverflow.com/questions/5416414/signed-unsigned-comparisons – doug