バッファサイズが十分である場合、2つの異なる構造のmemcpy
を呼び出して元のデータを保持しますか?また、それぞれのデータ型が重複していれば、以前のデータ型のデータを持つ別のデータ型の値を取得するように定義されていますか?memcpyは異なるタイプ間でデータを保存しますか?
これは、C/CPPの両方の言語についても同様でなければなりませんが、私は、CPPの例を提供しています -
#include <iostream>
#include <cstring>
using namespace std;
struct A{
int a;
char b[10];
};
struct B{
int ba;
int bb;
};
int main(){
B tmp;
tmp.ba = 50;
tmp.bb = 24;
cout << tmp.ba << tmp.bb << "\n";
// everything is fine yet
A obj;
memcpy(&obj, &tmp, sizeof(tmp));
// 1. is this valid?
cout << obj.a << "\n";
B newB;
memcpy(&newB, &obj, sizeof(newB));
// 2. Are these valid?
cout << newB.ba << newB.bb << "\n";
}
上記の例では、私が第一にコメントして第二のコメント、彼らは有効であり、データが保存されてきました十分なバッファ領域があれば?私たちはこれを移植可能なことができますか?
それに関連する構造体やその他の関数はCライブラリにありますが、これを使用してC++でコンパイルします。
'memcpy'はデータ型を知らず、気にもしません。宛先バッファが十分に大きいかどうかにかかわらず、指定したバイト数がコピーされます。範囲が重なると、振る舞いは*未定義*であり、 'memmove'を使うべきです。 –
'memcpy()'は基礎となるデータ型に関する何も保証しません。 –
CまたはC++?それらは全く異なるオブジェクトモデルを持つ2つの異なる言語です。 –