如何在C中为指针添加偏移量?

问题描述

我正在修改微控制器的固件。 我有两个 RxBuffers,我打算添加第三个,所以我打算使用相同的例程来解析它们。问题是其中一个与其他的偏移量不同。 示例:

RxBuffer1="#DATA,1,5,8"
RxBuffer2="DATA,8" //<-Different offset
RxBuffer3="#DATA,8"

void ParseData(char *xBuffer)
{
     //Parse data starting at xBuffer +1
}

创建 ParseData 例程是为了解析 RxBuffer1 格式而不是 RxBuffer2 格式的数据。 在此级别未以任何方式使用 #。 我应该如何传递地址以使ParseData 正确获取RxBuffer2 的地址? 我认为应该是RxBuffer2-1。也许ParseData(RxBuffer2-1)

解决方法

传递 RxBuffer2 - 1 是未定义的行为。相反,您应该创建一个需要 RxBuffer2 格式的函数,并且可能重构旧函数以使用这个新函数:

void ParseActualData(char *xBuffer)
{
    // expects `DATA`
}

void ParseData(char *xBuffer)
{
    // expects `#DATA`
     ParseActualData(xBuffer + 1);
}

或者,如果解析逻辑允许,您可以让 ParseData 接受两种变体并根据第一个字符确定要执行的操作(例如,如果第一个字符是 #,则跳过它)。>