C++ 有符号和无符号整数表达式之间的比较

C++ Comparison between signed and unsigned integer expressions

本文关键字:之间 比较 表达式 无符号整数 符号 C++      更新时间:2023-10-16

我是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;
}
解决此问题

的最直接方法是将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];
}

编写静态强制转换 (int(strlen(m_sku(,反之亦然 std::size_t i = 0。这样比较的项目将是相同的。