C语言 字符数组和空终止字符之间的关系



网络上关于strncpy安全与不安全的整个"辩论"都让我发疯。我发现有些人说strncpy是"魔鬼",在我看来,这听起来像是他们缺乏编程纪律。我知道当src大于dest时,没有字符添加到dest末尾(最终会导致问题(。我听说过strlcpy,但据我所知,这不是标准的。我希望我的代码尽可能可移植,所以我不认为这是一个可行的解决方案。

这是我目前的解决方案...

首先定义缓冲区大小

#define BUFSIZE 1024

在程序中,使用calloc分配缓冲区

char *buffer;
buffer = calloc(BUFSIZE+1, sizeof(char));

然后在代码的后面,假设我想将msg复制到buffer并且我使用

strncpy(buffer,msg,BUFSIZE);

由于我预先分配了bufferBUFSIZE + 1,因此这可确保buffer的最后一个字节,无论msg是否大于BUFSIZE

现在的问题是,calloc初始化字符数组吗?将calloc的零分配解释为与相同是错误的吗?

将数组清除到0将填充所有字符以

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

请参阅空值、"\0"和 0 之间有什么区别

相关内容

  • 没有找到相关文章

最新更新