7

strncpy を使用して、文字列の一部のみを C の別の文字列にコピーしようとしています。

そのような:

c[] = "How the heck do I do this";

"do this"次に、次のように他の文字列にコピーします。

d[] = "do this"

助けていただければ幸いです。

4

4 に答える 4

12

コピーしたい最初の文字のアドレスを渡すだけです: strcpy(dest, &c[13]).

文字列が終了する前に終了したい場合は、strncpyor を使用memcpyしてください (コピーした文字列を 0 で終了することを忘れないでください)。

于 2012-09-20T00:29:53.897 に答える
4

strncpy(本質的に常に)間違った選択です。この特定のケースでは、それは機能しますが、ほとんど偶然です-文字列の終わりをコピーしているので、それはと同じように機能しますstrcpy。もちろん、それはうまくいくという事実につながりstrcpyますが、より簡単です。

より一般的なケースを処理したい場合は、かなり驚くべき(しかし非常に効果的な)選択肢sprintfがあります:あなたが望むことを正確に行うことができます:

sprintf(d, "%s", c+20);

sprintfstrncpy(またはとは異なりstrcpy)は、最も一般的な場合にも機能します-にコピーしたいとしますdo Idd適切にNULで終了する文字列として出力されたとします。

sprintf(d, "%*s", 4, c+13);

ここで、4はコピーするセクションの長さであり、コピーc+13するパーツの先頭へのポインタです。

于 2012-09-20T00:50:36.350 に答える
0

strncpy関数を探しているようです。C++ サイトは気にしないでください。ドキュメントは C 用です。

または、strcpy関数を使用することもできます。

于 2012-09-20T00:30:16.017 に答える
0

より適切なmemcpyを使用すると、文字列の一部のみをコピーできます。

strncpy または strcpy を使用すると、実際には文字列全体が '\0' ターミネータまでコピーされます。

いずれにせよ、結果の文字列に十分なスペースがあると想定するのが賢明で賢明です。そうしないと、バッファー オーバーフローが発生するため、バッファーに十分なスペースがあることを確認してください。

于 2012-09-20T00:36:25.027 に答える