一个结构中的变量char的大小(C ANSI)



我有以下代码

#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

空字符需要第五个字节。否则,空字符将以下一个字段开始的相同偏移量写入,将字符串复制到下一个域将有效地覆盖最后一个空字符。打印字符串只需要在每个字符上循环,直到找到

char类型具有最不严格的对齐要求,也就是说,它可以位于任何地址,因此编译器不插入任何填充。

最新更新