calloc char数组与空终止符之间的关系

时间:2018-06-27 00:42:23

标签: c calloc strncpy nul

网上关于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相同是否错误?

1 个答案:

答案 0 :(得分:1)

将数组清除为MutableLiveData会将所有字符填充为0

  

因此'\ 0'完全等同于一个未经修饰的0整数常量-唯一的区别在于它传达给人类读者的意图(“我将其用作空字符”。)

请参见What is the difference between NULL, '\0' and 0