strncpy を使用して、文字列の一部のみを C の別の文字列にコピーしようとしています。
そのような:
c[] = "How the heck do I do this";
"do this"
次に、次のように他の文字列にコピーします。
d[] = "do this"
助けていただければ幸いです。
コピーしたい最初の文字のアドレスを渡すだけです: strcpy(dest, &c[13])
.
文字列が終了する前に終了したい場合は、strncpy
or を使用memcpy
してください (コピーした文字列を 0 で終了することを忘れないでください)。
strncpy
(本質的に常に)間違った選択です。この特定のケースでは、それは機能しますが、ほとんど偶然です-文字列の終わりをコピーしているので、それはと同じように機能しますstrcpy
。もちろん、それはうまくいくという事実につながりstrcpy
ますが、より簡単です。
より一般的なケースを処理したい場合は、かなり驚くべき(しかし非常に効果的な)選択肢sprintf
があります:あなたが望むことを正確に行うことができます:
sprintf(d, "%s", c+20);
sprintf
strncpy
(またはとは異なりstrcpy
)は、最も一般的な場合にも機能します-にコピーしたいとしますdo I
がd
、d
適切にNULで終了する文字列として出力されたとします。
sprintf(d, "%*s", 4, c+13);
ここで、4
はコピーするセクションの長さであり、コピーc+13
するパーツの先頭へのポインタです。
strncpy関数を探しているようです。C++ サイトは気にしないでください。ドキュメントは C 用です。
または、strcpy
関数を使用することもできます。
より適切なmemcpyを使用すると、文字列の一部のみをコピーできます。
strncpy または strcpy を使用すると、実際には文字列全体が '\0' ターミネータまでコピーされます。
いずれにせよ、結果の文字列に十分なスペースがあると想定するのが賢明で賢明です。そうしないと、バッファー オーバーフローが発生するため、バッファーに十分なスペースがあることを確認してください。