c - 错误 : invalid operands to binary -

标签 c

这段代码给出了错误error: invalid operands to binary -:

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);
}

我将 UINT8 *yes_no 更改为 char *yes_no 并得到解决。但是不明白为什么会出现错误以及为什么会得到解决。请解释问题。

提前致谢。

最佳答案

两个指针相减时,必须是同一类型。这是因为 C 中的指针运算是基于指针的大小,因此例如,如果您从 int* 中减去 char*,您将得到一个 1 字节的对象和一个4 字节对象,因此编译器无法知道结果应该以 1 字节为单位还是以 4 字节为单位。

我知道你的两个指针都是单字节的,但它在标准 C 中仍然是不允许的(它没有假设不同类型的对象将存储在同一区域等)。

关于c - 错误 : invalid operands to binary -,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38350701/

相关文章:

c - 查找 C 程序中的错误以反转字符串

c - 如何获取每个进程的 GPU 使用率?

c - 如果我在末尾添加新行 '\n',scanf 将如何工作

c - C中函数的写法有几种?

c - 循环无法正常工作,还需要数据验证

java - 客户端-服务器网络入门

c - C 中带有 printf 和多维数组的 7 段显示

c - 关于 CS50 pset2 vigenere

c - 在 C 程序的 main() 函数中是否有充分的理由将变量声明为静态?

c - ADXL345只读ceros