我是c++的新手。我需要帮助解决这个错误:
Item.cpp: In member function ‘char* ict::Item::sku() const’:
Item.cpp:65:36: warning: comparison between signed and unsigned integer
expressions [-Wsign-compare]
这是导致错误的代码部分:
//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;
}
int I
改为std::size_t
。后者是无符号类型,是由 strlen() 返回的类型,它永远不会是负数。比较有符号和无符号整数可能会导致一些非常难以找到的问题,因此会出现警告。这是因为两个整数都被转换为无符号数,如果其中一个是负数,则会变成一个很大的正数,因此可能会得到一些非常奇怪的结果。可能是 https://dev59.com/zG035IYBdhLWcg3wcvmS 的重复内容。 - doug