答えて
- 十分に大きいバッファ(
malloc
/new[]
) - を割り当てるは
- (
strncpy
/memcpy
)バッファにAA列の最初の部分をコピーBB列(strcpy
/memcpy
) - にコピーをコピーします残りの文字列(
strncpy
/memcpy
)
std::string aa = "Hello, !";
std::string bb = "World";
aa.insert(7, bb);
は、なぜあなたはC++としてこれをタグ付けされているC++
からのwannaの使用文字列をいけませんか?
確かに......... –
はうまく動作します。ありがとう –
通常、最大限の最適化では、特定の要件を利用する必要があります。速度(または他のメトリック)を得るためには、コードの汎用性が低くなります。私たちが推測しなければならない間に、あなたがカットできるコーナーを知っているかもしれません。以下
コード断片は、これらのヘッダを使用します。
#include <stdio.h>
#include <string.h>
あなたはパフォーマンスを最大化したい場合は、それが最終的に文字列、後挿入のため事前に割り当てる十分なスペースに役立つだろう:
#define MAX_STR_LEN 256
char aa[MAX_STR_LEN] = "Hello, !";
char bb[] = "World";
挿入する場所をどのように知っているかは明示していません。コピー先の文字列へのオフセットとしての私のサンプルコードのために私は、挿入ポイントを定義します。
size_t pos = 7;
事前に文字列の長さのいずれかを知っている場合は、文字列をスキャンしなければならないはstrlenを呼び出すのconstの代わりに、使用する必要があります。ここで私はあなたがその幸運だとは思わない。
size_t srclen = strlen(bb);
memmove
機能が適切に重複送信元と送信先に処理します。
// +1 for count to include terminating null
memmove(aa+pos+srclen, aa+pos, strlen(aa)-pos+1);
memcpy
を速くいくつかのプラットフォーム上で、安全に文字列の間でコピーすることができます。
memcpy(aa+pos, bb, srclen);
今aa
は含まれてい結果。
あなたがして、必要なサイズにaa
を事前に割り当てることができない場合は、次の
// additional include for malloc
#include <stdlib.h>
char aa[] = "Hello, !";
char bb[] = "World";
size_t pos = 7;
size_t srclen = strlen(bb);
size_t dstlen = strlen(aa);
char *m = malloc(srclen+dstlen+1);
// Test for NULL or use an allocator that throws
memcpy(m, aa, pos);
memcpy(m+pos, bb, srclen);
memcpy(m+pos+srclen, aa+pos, dstlen-pos+1);
m
は、結果が含まれており、おそらくfree
にする必要がある「D最終的に。
バッファオーバーフローの可能性がある場合は、メモリ破損やセキュリティ上の脆弱性を避けるために、長さをチェックする必要があります。
こちらがお役に立てば幸いです。
これは私がサーフしたものです。それは本当に助けになりました。 +1情報を明確にするために –
char * newStr = malloc(strlen(aa)+ strlen(bb));
sprintf(newStr、 "%s%s"、aa、bb);
**なぜ**あなたはむしろcstringを使用しますか? – SLaks
なぜ 'C'と' C++'タグの両方を持っていますか?これはC++の質問で、Cの質問ではないようですね? –
"World"を "Hello、!"に挿入する最も最適で速い方法。 "Hello World!"を作るそれをハードコードすることです: 'char cc [] =" Hello、World! "'。私はそれを別に言いたいと思っています! –