0

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

char data[4] = {0};

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

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

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

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

char data[5] = {0};

该数组不会在 str* 系列函数中使用。

4

3 回答 3

3

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

于 2016-03-07T08:55:51.773 回答
1

char data[4];如果您不使用处理字符串之类的函数,则使用4 字节数据应该是安全的strcmp()strlen()或者该数据%s的说明符printf()

于 2016-03-07T08:55:26.027 回答
1

我使用的一些规则:

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

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

  • 如果它很大,并且大小动态变化,则可以通过分配malloc(),稍后通过调整大小realloc()。例如void *buf = malloc(size);

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

于 2016-03-07T09:14:06.680 回答