【发布时间】:2017-04-09 05:35:43
【问题描述】:
我是 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() 返回的类型,它永远不会是负数。比较无符号整数和有符号整数可能会导致一些非常难以发现的问题,因此会发出警告。警告是因为两个整数都转换为无符号整数,如果一个是负数,它会变成一个很大的正数,所以你可以获得一些非常奇怪的结果。 stackoverflow.com/questions/5416414/signed-unsigned-comparisons 的可能重复项
标签: c++