网络上关于 strncpy 安全与不安全的整个“辩论”让我发疯。我发现有些人说 strncpy
是“魔鬼”,在我看来,这听起来像是他们缺乏编程纪律。我发现当 src
大于 dest
时,没有将 \0
字符添加到 dest
的末尾>(这最终会导致问题)。我听说过 strlcpy
,但据我所知,它不是标准的。我希望我的代码尽可能可移植,所以我不认为这是一个可行的解决方案。
这是我当前的解决方案...
首先定义缓冲区大小
#define BUFSIZE 1024
在程序内,使用calloc
分配缓冲区
char *buffer;
buffer = calloc(BUFSIZE+1, sizeof(char));
然后在代码中,假设我想将 msg
复制到 buffer
并使用
strncpy(buffer,msg,BUFSIZE);
由于我使用 BUFSIZE + 1
预分配了 buffer
,因此这确保了 buffer
的最后一个字节是 \0
无论 msg
是否大于 BUFSIZE
。
现在的问题是,calloc
是否用\0
初始化字符数组?将 calloc
的零分配解释为与 \0
相同是否错误?
最佳答案
将数组清空为0
会将所有字符填充到\0
。
So '\0' is completely equivalent to an unadorned 0 integer constant - the only difference is in the intent that it conveys to a human reader ("I'm using this as a null character.").
关于c - calloc char 数组与 null 终止符之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51053061/