静态缓冲区和非初始化静态缓冲区

时间:2014-01-15 08:01:09

标签: c

您好我在这里有两个问题

  1. 如何在缓冲区中存储十六进制值,例如0x0a和0x1F;

    char buffer[2] = "0x0a 0x1F";
    

    但这不是正确的方法,它给出了大小10而不是2.任何人都可以建议我如何继续。

  2. 我见过像这样的数组

    char buffer[] = " static array";
    

    在结构中,

    struct Point {
       char x[];
       char y[];
    };
    
    这是什么意思?编制需要多少大小

1 个答案:

答案 0 :(得分:5)

首先,假设您确实需要一个双字节数组而不是三字节字符串(包括NULL终止符),您可以使用:

char buffer[] = {0x0a, 0x1f};

对于第二种,最简单的方法是简单地检查:

sizeof(buffer)

或:

sizeof(struct Point)

虽然我很确定你的结构定义会失败,因为char x[]不是一个完整的类型。该标准的当前版本允许在结构的 end 处使用灵活的阵列大小,但不是您在那里的方式。

两者的可能大小(一旦你用struct Point声明char x[5])将是14(" static array"中的字符数,包括NULL终止符)和5({{{}的大小1}}本身(灵活的数组成员倾向于不占用空间,例如,如果通过x获得内存块,它们更多地允许任意额外空间。)