【问题标题】:static buffer and non initialize static buffer静态缓冲区和非初始化静态缓冲区
【发布时间】:2014-01-15 16:49:43
【问题描述】:

您好,我这里有 2 个问题

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

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

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

  2. 我见过这样的数组

    char buffer[] = " static array";
    

    在结构中,

    struct Point {
       char x[];
       char y[];
    };
    

    这是什么意思?编译需要多少大小

【问题讨论】:

  • char buffer[2] = "\x0a\x1F";
  • @BLUEPIXY 你是说buffer[3]吗?
  • @Andreas buffer[2] 意思是 buffer[2]
  • 是的,但是"\x0a\x1F" 是三个字符(记住终止符\0
  • @Andreas 用作初始化常量长字符串在 C 中不是错误。

标签: c


【解决方案1】:

首先,假设你真的想要一个两字节数组而不是三字节字符串(包括 NULL 终止符),你可以使用:

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

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

sizeof(buffer)

或:

sizeof(struct Point)

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

这两者的可能大小(一旦您声明 struct Pointchar x[5])将是 14(" static array" 中的字符数,包括 NULL 终止符)和 5(x 本身的大小(灵活的数组成员)往往不占用空间,如果内存块是由malloc 获得的,它们更多的是允许任意额外的空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    相关资源
    最近更新 更多