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