std::memmove - cppreference.com
提供: cppreference.com
<tbody> </tbody>
|
|
||
src の指すオブジェクトから dest の指すオブジェクトに count 個の文字をコピーします。 どちらのオブジェクトも unsigned char の配列として再解釈されます。
オブジェクトはオーバーラップしても構いません。 コピーは、文字が一時的な文字配列にコピーされ、その後その配列から dest にコピーされたかのように、行われます。
dest または src のいずれかが無効またはヌルポインタの場合、動作は未定義です (たとえ count がゼロでも)。
オブジェクトが潜在的にオーバーラップしている、または TriviallyCopyable でない場合、 memmove の動作は規定されず、未定義になることがあります。
引数
| dest | - | コピー先のメモリ位置を指すポインタ |
| src | - | コピー元のメモリ位置を指すポインタ |
| count | - | コピーするバイト数 |
戻り値
dest。
ノート
一時的なバッファを使用する「かのように」と規定されているにもかかわらず、この関数の実際の実装は二回のコピーや余分なメモリのオーバーヘッドを負担しません。 小さな count に対しては、レジスタにロードし、書き出すかもしれません。 大きなブロックに対しては、一般的な手法 (glibc および bsd libc) は、コピー先がコピー元より前に始まるならばバッファの先頭から順方向に、そうでなければ末尾から逆方向にバイトをコピーし、オーバーラップがまったくないときは std::memcpy にフォールバックします。
例
#include <iostream> #include <cstring> int main() { char str[] = "1234567890"; std::cout << str << '\n'; std::memmove(str + 4, str + 3, 3); // [4, 5, 6] から [5, 6, 7] へのコピー。 std::cout << str << '\n'; }
出力:
関連項目
| バッファを別のバッファへコピーします (関数) [edit] | |
| バッファを文字で埋めます (関数) [edit] | |
| 2つのオーバーラップしている可能性のある配列間でワイド文字を一定量コピーします (関数) [edit] | |
(C++11) |
指定範囲の要素を新しい位置にコピーします (関数テンプレート) [edit] |
| 指定範囲の要素を後ろからコピーします (関数テンプレート) [edit] | |
(C++11) |
型がトリビアルにコピー可能かどうか調べます (クラステンプレート) [edit] |
memmove の C言語リファレンス | |