我有以下代码
#include <stdio.h>
#include <string.h>
struct Wdd
{
char protocolId[4];
char messageId[4];
char sizeBody[4];
};
main()
{
struct Wdd msgWdd;
strcpy(msgWdd.protocolId, "GABC");
strcpy(msgWdd.messageId, "WDSS");
strcpy(msgWdd.sizeBody, "0020");
printf("protocolId: %sn", msgWdd.protocolId);
printf("messageId: %sn", msgWdd.messageId);
printf("sizeBody: %sn", msgWdd.sizeBody);
printf("sizeStructure: %dn", sizeof(msgWdd));
}
打印结果为
protocolId: GABCWDSS0020
messageId: WDSS0020
sizeBody: 0020
sizeStructure: 12
为什么?如果我更改"5"的字段大小,则打印为(正确,如我所期望的)
protocolId: GABC
messageId: WDSS
sizeBody: 0020
sizeStructure: 15
为什么?
我读过编译器根据对齐要求增加了一些字节,但我真的不明白。要解决这个问题,我应该只增加字段的大小(到5),还是有其他方法?
Alex
空字符需要第五个字节。否则,空字符将以下一个字段开始的相同偏移量写入,将字符串复制到下一个域将有效地覆盖最后一个空字符。打印字符串只需要在每个字符上循环,直到找到