如果緩衝區大小足夠,在兩種不同結構上調用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'既不知道也不關心數據類型。它複製您指定的字節數,無論目標緩衝區是否足夠大。當範圍重疊時,行爲是* undefined *,應該使用'memmove'。 –
'memcpy()'不能保證任何關於底層數據類型。 –
C或C++?這些是兩種不同的語言,具有完全不同的對象模型。 –