藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 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的對象地址不是連續的



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com