編輯:對於我的代碼片段中的錯誤感到抱歉,現在我看到兩個輸出都是相同的。以下是一個編輯版本。交換指針而不是memcpy
比方說,我有一個結構:
typedef struct
{
char m[5];
char f[6];
} COUPLE;
而且只包含短語RomeoJuliet
,我讀入一個數組文件:
char *data = malloc(11);
FILE *f = fopen("myfile", "rb");
fread(data, 1, 11, f);
fclose(f);
當我需要填補我一直使用此代碼我結構從字節數組:
COUPLE titanic;
memcpy(&titanic, data, sizeof(data));
printf("%s and %s", titanic.m, titanic.f);
這工作正常,但真的我的字節數組可以是V大,所以下面是我的優化我的代碼的嘗試。
COUPLE *titanic = (COUPLE *)data;
printf("%s and %s", titanic->m, titanic->f);
所以,我的問題是:
- (過時)爲什麼我得到不同的輸出?
- (過時)如何僅通過從數組中轉換來填充結構?
- 我應該避免這種優化嗎?
- 它有可能的缺陷嗎?
重新#3:是的,通過各種手段。 – sbi 2011-03-27 20:36:46
提示Re#1:考慮如何終止C風格的字符串。 – 2011-03-27 20:38:46
無論什麼讓你覺得這是任何一種「優化」?這只是可怕的糟糕的編程,沒有明顯的好處來證明它的合理性。 – 2011-03-27 20:46:14