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