strchr(),APT_String和减法运算

时间:2011-05-13 21:08:21

标签: c strchr

我正在使用一个用C语言编写的程序,该程序涉及比较混合的姓氏。例如,它可能会比较Mary Jay-Blige和Mary Kay-Blige。 找到连字符并将变量设置到其位置的代码是:

APT_String LAST_NAME
char * p_ich;
int iPosHyphen;
p_ich = strchr(LAST_NAME,'-');
iPosHyphen = p_ich-LAST_NAME+1;

其中APT_String是IBM DataStage的数据类型。

我继承了上面的代码,它似乎“有效”,但我想对p_ich-LAST_NAME+1操作做一些澄清。 也就是说,如果strchr()返回第一个' - '的位置,那么C如何处理这个算术?

如果我致电cout<<p_ich;,我会获得-Blige。所以我想一旦找到指定的char,它会返回字符串的剩余部分吗?

2 个答案:

答案 0 :(得分:1)

是的,strchr返回第一个出现的地址(不是索引)。因此,您从中减去原始字符串(地址)以获取连字符的位置。但是这里的+1会让你获得连字符后的第一个位置(索引)。

这样p_ich [iPosHyphen] =='B'。

答案 1 :(得分:1)

这是非常基本的C指针算法,您可以轻松找到有关它的大量信息。

从另一个指针中减去一个指针会产生它们的索引之间的距离,就像它们是同一个数组的一部分一样。在您的示例中,它将是* p_ich *和* LAST_NAME *之间的距离。 使用标准字符类型,距离将等于存储器地址之间的差异,但通常是:

ptr1-ptr2 == ((unsigned long)ptr - (unsigned long)ptr2)/sizeof(*ptr)