编辑:对于我的代码片段中的错误感到抱歉,现在我看到两个输出都是相同的。以下是一个编辑版本。交换指针而不是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