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

これは非常に基本的な C ポインター演算であり、これに関する多くの情報を簡単に見つけることができます。

あるポインターを別のポインターから減算すると、同じ配列の一部であるかのように、それらのインデックス間の距離が得られます。あなたの例では、*p_ich* と *LAST_NAME* の間の距離になります。標準の char 型の場合、距離はメモリ アドレス間の差に等しくなりますが、一般的には次のようになります。

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

はい、strchr は (インデックスではなく) 最初に出現したアドレスを返します。そのため、元の文字列 (アドレス) をそこから差し引いて、ハイフンの位置を取得します。しかし、ここで +1 は、ハイフンの後の最初の位置 (インデックス) を取得します。

そのような p_ich[iPosHyphen] == 'B'.

于 2011-05-13T21:19:02.090 に答える