这段代码给出了错误:

if(memcmp(params , DEV_SERVICE_DISCOVERY , strlen(DEV_SERVICE_DISCOVERY)) == 0)
{
    UINT8 *yes_no;

    params = XSH_UtilFindNextToken(params);
    yes_no = XSH_UtilFindNextToken(params);

    params[yes_no - params - 1] = '\0';

    rc = AppTest_ServiceDiscovery(params, yes_no , strlen(yes_no), pOut);
}

我把error: invalid operands to binary -改成UINT8 *yes_no,结果就解决了。但不明白为什么会出现错误为什么会解决。请解释一下这个问题。
提前谢谢。

最佳答案

当减去两个指针时,它们必须是同一类型的。这是因为C语言中的指针算法是基于指针对象的大小的,例如,如果从char*中减去int*,则有一个1字节对象和一个4字节对象,因此编译器无法知道结果是1字节单位还是4字节单位。
我知道您的两个指针对象都是单字节的,但在标准C中仍然是不允许的(这不假设不同类型的对象将存储在同一个区域中,等等)。

09-10 01:50
查看更多