在 C 中声明字符数组的最佳实践
Best practice to declare character array in C
我必须从一个 4 字节长的设备中读取数据,这样我就声明了数组
char data[4] = {0};
我将根据索引解析它并保证在索引 3 处停止。
data[0]..data[3]
在这种情况下,NUL('\0') 没有空间。
我想知道这是否安全,或者我应该将数组声明为
char data[5] = {0};
str*系列函数中不会使用该数组
如果您不使用处理像 strcmp()
、strlen()
或 %s
说明符这样的字符串的函数,那么对 4 字节数据使用 char data[4];
应该是安全的printf()
该数据。
如果要读取的数据是 4
字节的字符串,或者如果它大于 4
字节并且您使用 char
作为字符数组而不是字符串,那么不用担心。否则你必须关心 '[=13=]'
.
我使用的一些规则:
要存储字符串,应该为 [=10=]
字符多分配 1 个字节。例如 char arr[len+1];
要存储字符串以外的固定大小的数据,请根据需要分配。例如 char data[len];
如果它很大,并且大小动态变化,则可以通过 malloc()
分配,稍后通过 realloc()
调整大小。例如 void *buf = malloc(size);
当数组需要被多个函数使用时,声明为static char[]
或者通过malloc()
.
[=33=分配]
我必须从一个 4 字节长的设备中读取数据,这样我就声明了数组
char data[4] = {0};
我将根据索引解析它并保证在索引 3 处停止。
data[0]..data[3]
在这种情况下,NUL('\0') 没有空间。
我想知道这是否安全,或者我应该将数组声明为
char data[5] = {0};
str*系列函数中不会使用该数组
如果您不使用处理像 strcmp()
、strlen()
或 %s
说明符这样的字符串的函数,那么对 4 字节数据使用 char data[4];
应该是安全的printf()
该数据。
如果要读取的数据是 4
字节的字符串,或者如果它大于 4
字节并且您使用 char
作为字符数组而不是字符串,那么不用担心。否则你必须关心 '[=13=]'
.
我使用的一些规则:
要存储字符串,应该为
[=10=]
字符多分配 1 个字节。例如char arr[len+1];
要存储字符串以外的固定大小的数据,请根据需要分配。例如
char data[len];
如果它很大,并且大小动态变化,则可以通过
malloc()
分配,稍后通过realloc()
调整大小。例如void *buf = malloc(size);
当数组需要被多个函数使用时,声明为static
[=33=分配]char[]
或者通过malloc()
.