在 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=分配]