|
藍森林 http://www.lslnet.com 2006年6月6日 10:18
memcpy 拷貝結構體的問題
struct d{
char *s;
int i;
}
這裡假設s的值為"china"
struct dd{
char s[7];
int i;
}
請問在memcpy在d中拷貝的是多少字節,在dd中拷貝的呢? |
memcpy 拷貝結構體的問題
d: 4+4
dd: 7( or 8 )+4 |
memcpy 拷貝結構體的問題
用sizeof計算機構的大小,各個平台是不一樣的
另外,結構可以直接相互賦值
struct my_s my_stru_var1, my_stru_var2;
...
my_stru_var1=my_stru_var2; |
memcpy 拷貝結構體的問題
請問在memcpy在d中拷貝的是多少字節,在dd中拷貝的呢?
由memcpy參數決定copy多少,但是在dd中,copy的長度超過sizeof(dd.s)將可能(注意是可能)導致core dump. |
memcpy 拷貝結構體的問題
編譯系統的結構體中字節分配在32位UNIX下一般為4個字節一個單位,是一種系統的對齊策率。 |
memcpy 拷貝結構體的問題
請問在memcpy在d中拷貝的是多少字節,在dd中拷貝的呢?
dd中拷貝?
什麼拷 |
memcpy 拷貝結構體的問題
理論上
1、第一個結構體:
struct d{
char *s;
int i;
}
能copy足夠的數據,直到系統不允許的情況!
2、第二個結構體:
這裡假設s的值為"china"
struct dd{
char s[7];
int i;
}
這個能夠copy滿一個頁面。該問題的原因於如下的帖子討論的一致
http://www.www.lslnet.com/linux/forum/viewtopic.php?t=68536 |
memcpy 拷貝結構體的問題
struct d{
char *s;
int i;
}
結構保存方式如下
s[4 個字節]
i 4個字節
所以複製比這個數目還大的數據的話會報內存訪問越界 |
memcpy 拷貝結構體的問題
空間是運行期分配的,可以複製比那個大的數據,但是的第二次賦值結果是不克預知的。 |
memcpy 拷貝結構體的問題
直接賦值是不可以的
只能分次賦值
memcpy a.s ....
a.i=
這樣可以
因為s只是個指針
指向其它地址
所以與a的對象地址不是連續的 |
| |