0

我正在使用一个用 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。所以我猜它会在找到指定的字符后返回字符串的其余部分?

4

2 回答 2

1

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

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

于 2011-05-13T21:19:02.090 回答
1

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

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

ptr1-ptr2 == ((unsigned long)ptr - (unsigned long)ptr2)/sizeof(*ptr)
于 2011-05-13T21:28:19.297 回答