0

char* 配列を使用して文字列の一部を別の char* 配列にコピーしていましたが、これを行うかどうか疑問に思っていました

do {
    *pntr1++ = *pntr2++
} while (*pntr2 != '\0');

と同じことです

do
{
    *indPtr = *wordPtr;
    indPtr++;
    wordPtr++;
} while (*wordPtr != '\0');

または、最初の方法を使用してインデックスをスキップすることになりますか?

4

2 に答える 2

3

はい、2つは同等です。ポストインクリメントとは、インクリメントがその式で使用されるの値を意味し、インクリメントは式の最後のシーケンス ポイントの前に発生します (または、C++ 用語では、次の式の「前にシーケンスされます」)。

したがって、どちらの場合も、代入ではインクリメントされる前のポインターの値が使用され、比較\0ではポインターがインクリメントされた後の値が使用されます。

これが文字列をコピーすると予想される場合、それは問題につながります: 少なくともあなたが示したコードでは\0、(推定された) 文字列を終了する はコピーされません (ただし、後で宛先を終了するコードを追加することはできます)ストリング)。

于 2013-07-17T05:15:56.963 に答える
2

演算子++を like で使用すると、a++最初に の値が返され、a次にその値がインクリメントされます。

だから、コード

*a++ = *b++

*a = *b;
a++;
b++;

同等です。

于 2013-07-17T05:15:33.837 に答える