在C中声明字符数组的最佳实践

时间:2016-03-07 08:52:26

标签: c arrays string nul

我必须从4字节长的设备读取数据,以便我声明了数组

char data[4] = {0};

我将根据索引对此进行解析,并保证在索引3处停止。

  

数据[0] ..数据[3]

在这种情况下,NUL没有空间(' \ 0')。

我想知道这被认为是安全的,或者我应该将数组声明为

char data[5] = {0};

此数组不会用于str *系列函数。

3 个答案:

答案 0 :(得分:3)

如果要读取的数据是4个字节的字符串,或者如果它大于4个字节,并且您使用char作为字符数组而不是字符串,则不需要担心。否则你必须关心'\0'

答案 1 :(得分:1)

如果您不使用处理char data[4];strcmp()strlen()说明符%s等字符串的函数,则使用printf()表示4字节数据应该是安全的1}}用于该数据。

答案 2 :(得分:1)

我使用的一些规则:

  • 要存储字符串,应为\0字符分配1个字节。例如char arr[len+1];

  • 要存储除字符串以外的修订大小数据,请根据需要进行分配。例如char data[len];

  • 如果它非常大且动态尺寸发生变化,则可以通过malloc()分配,然后通过realloc()调整大小。例如void *buf = malloc(size);

  • 当数组需要由多个函数使用时,请将其声明为静态char[]或通过malloc()分配。