我是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;
}
答案 0 :(得分:2)
解决此问题的最直接方法是使i
成为无符号变量而不是签名变量。您可以使用size_t
来匹配strlen的返回类型:
size_t length = strlen(m_sku);
char *arr = new char[length]();
for (size_t i = 0; i <= length; i++) {
arr[i] = m_sku[i];
}
但要小心,因为相同的替换不适用于倒数为0的循环。
// oops! This is an infinite loop:
for (size_t i = length-1; i >=0; i--) {
arr[i] = m_sku[i];
}
答案 1 :(得分:0)
写一个静态强制转换(int)strlen(m_sku),反之亦然std :: size_t i = 0。 因此,比较项目将是相同的。