网上关于strncpy
安全与不安全的整个“辩论”使我发疯。我发现有人说strncpy
是“魔鬼”,对我来说,这听起来像他们缺乏编程纪律。我知道\0
大于dest
时,src
的末尾没有添加dest
字符(这最终会导致问题)。我听说过strlcpy
,但据我了解,这不是标准的。我希望我的代码尽可能地可移植,所以我认为这不是可行的解决方案。
这是我当前的解决方案...
首先定义缓冲区大小
#define BUFSIZE 1024
在程序中,使用calloc
char *buffer;
buffer = calloc(BUFSIZE+1, sizeof(char));
然后在代码后面,假设我要将msg
复制到buffer
,然后使用
strncpy(buffer,msg,BUFSIZE);
由于我用buffer
预分配了BUFSIZE + 1
,所以这确保了buffer
的最后一个字节是\0
,无论msg
是否大于{{1} }。
现在的问题是,BUFSIZE
是否使用calloc
初始化字符数组?将\0
的零分配解释为与calloc
相同是否错误?
答案 0 :(得分:1)
将数组清除为MutableLiveData
会将所有字符填充为0
。
因此'\ 0'完全等同于一个未经修饰的0整数常量-唯一的区别在于它传达给人类读者的意图(“我将其用作空字符”。)