我必须从4字节长的设备读取数据,以便我声明了数组
char data[4] = {0};
我将根据索引对此进行解析,并保证在索引3处停止。
数据[0] ..数据[3]
在这种情况下,NUL没有空间(' \ 0')。
我想知道这被认为是安全的,或者我应该将数组声明为
char data[5] = {0};
此数组不会用于str *系列函数。
答案 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()
分配。