一個目的foo
被寫入一個新文件在平臺1爲:C++平臺兼容性
write(file, &myFoo, sizeof(struct foo));
...,然後用在平臺2讀:
read(file, &myFoo, filesize(file));
foo
該對象具有定義如下:
struct foo
{
char a;
int b;
long c;
char* d;
};
加載時可能會出現什麼樣的問題平臺2上的?
一個目的foo
被寫入一個新文件在平臺1爲:C++平臺兼容性
write(file, &myFoo, sizeof(struct foo));
...,然後用在平臺2讀:
read(file, &myFoo, filesize(file));
foo
該對象具有定義如下:
struct foo
{
char a;
int b;
long c;
char* d;
};
加載時可能會出現什麼樣的問題平臺2上的?
當你做到這一點,你需要注意:
char
是可以信任的唯一一個)ASCII
vs EBCDIC
? (是啊,真的嗎?)「字符是唯一可以信任的字符」 - 而且這不是一種有用的方式。'sizeof(char)'爲1,但如果平臺1上的CHAR_BIT爲16,平臺2上的CHAR_BIT爲8,那麼當文件從一個系統傳輸到另一個系統時,必須提供一些信息。實際上,16位字符系統可能沒有文件系統,而9位系統是古老的沒有人關心的,但是原則上你甚至不能相信'char'... – 2011-05-29 22:05:08
各種問題!
我們不知道char
,int
,long
或char*
在不同平臺上的尺寸是否相同。
發生了什麼事d指出?
成員之間也可能有填充,這可能會在平臺之間有所不同。大端和小端系統會按不同的順序存儲整數和指針的字節。如果你真的不走運,也可能會有一箇中端系統。
謝謝,我現在明白了... – 2011-05-29 21:52:30
他接受了這個,沒有問中間碼?害怕。 – 2011-05-29 22:15:38
與其他人笑,而不是他們。這非常接近被標記。真的有什麼需要居高臨下的嗎?你給答案增加了什麼價值。 – mattnz 2011-05-30 04:43:01
我認爲,你必須使用包編譯,以確保沒有填充。 否則char的大小將有4個字節,具體取決於默認的填充方法。
char *該地址指針在32位機器上可以有32位,但在64位機器上可以有64位。 所以直接存儲指針是無稽之談。
最後一個是endian。
這聽起來很像功課... – grapefrukt 2011-05-29 21:32:35
由於您沒有從'write'返回測試錯誤,所以'Foo'可能沒有被正確寫出。還有很多其他問題已經在SO上被解決了很多次。 – 2011-05-29 21:36:01
這是不是我的工作面試考試,我覺得我完全被轟炸了!我只是想通過所有的問題,並找出我做錯了什麼!抱歉! – 2011-05-29 21:50:49