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

C 静态缓冲区和非初始化静态缓冲区,c,C,嗨,我这里有两个问题 如何在缓冲区中存储十六进制值,例如0x0a和0x1F char buffer[2] = "0x0a 0x1F"; 但这不是正确的方法,它给出的尺寸是10而不是2。有人能建议我如何继续吗 我见过这样的阵列 char buffer[] = " static array"; 在结构上, struct Point { char x[]; char y[]; }; 这是什么意思?编译需要多少大小 对于第一种情况,假设您确实想要一个两字节数组而不是一个三字节字符串(包

嗨,我这里有两个问题

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

    char buffer[2] = "0x0a 0x1F";
    
    但这不是正确的方法,它给出的尺寸是10而不是2。有人能建议我如何继续吗

  • 我见过这样的阵列

    char buffer[] = " static array";
    
    在结构上,

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


  • 对于第一种情况,假设您确实想要一个两字节数组而不是一个三字节字符串(包括空终止符),您可以使用:

    char buffer[] = {0x0a, 0x1f};
    
    对于第二种情况,最简单的方法是检查:

    sizeof(buffer)
    
    或:

    虽然我很确定您的结构定义会失败,因为
    charx[]
    不是一个完整的类型。当前版本的标准允许在结构的末尾使用灵活的数组大小,但不允许在结构的末尾使用灵活的数组大小


    这两个字符的可能大小(使用
    char x[5]
    声明
    struct Point
    后)分别为14(包含空终止符的
    静态数组中的字符数)和5(x
    本身的大小)(灵活的数组成员往往不会占用空间,例如,如果内存块是通过
    malloc
    获得的,它们更适合于允许任意的额外空间)。

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